毛毛虫爬行中 发表于 2018-4-7 15:33:22

快速排序有些数组会出问题,求指教哪里不对

#include <stdio.h>
#include <stdlib.h>

void quicksort (int arr[], int left, int size) // size为数组元素个数
{
    int i,j;
    i = left;//左边数据的位置
    j = size-1;//右边数据的位置
    int temp;   //替换用的变量
    int pivot = arr[(size-1)/2]; //基准点
    while (i <= j)
    {
      while (arr < pivot)
      {
            i++;
      }
      while (arr > pivot)
      {
            j--;
      }
      if (i <= j)
      {
            temp = arr;
            arr = arr;
            arr = temp;
            i++;
            j--;
      }
    }
    if (i < (size-1))
    {
      quicksort (arr, i, size-1);
    }
    if (j > left)
    {
      quicksort (arr, left, j);
    }
}

//打印数组
void printarr (int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
      printf ("%d ", arr);
    }
    printf ("\n");
}

int main()
{
    int arr = {1, 5, 2, 2, 3, 4, 3};
    int size = 7;
    int left = 0;
    printarr (arr, size);
    quicksort (arr, left, size);
    printarr (arr, size);
    return 0;
}

毛毛虫爬行中 发表于 2018-4-7 15:35:03

代码里给的数组排序结果是错的,不知道为什么

BngThea 发表于 2018-4-7 16:58:11

跟小甲鱼老师的代码比对一下先

毛毛虫爬行中 发表于 2018-4-7 17:28:09

BngThea 发表于 2018-4-7 16:58
跟小甲鱼老师的代码比对一下先

对比了,我只是把老师的right换成size了,但是在函数里把size-1了,效果应该是一样的,结果就不对,不明白哪里不对

毛毛虫爬行中 发表于 2018-4-7 17:28:57

毛毛虫爬行中 发表于 2018-4-7 17:28
对比了,我只是把老师的right换成size了,但是在函数里把size-1了,效果应该是一样的,结果就不对,不明 ...

我这里的size就是数组的大小,跟length是相等的
页: [1]
查看完整版本: 快速排序有些数组会出问题,求指教哪里不对