c中的随机快速排序产生不正确/部分排序的输出

时间:2013-08-04 14:59:03

标签: c quicksort

我正在尝试使用随机数据集实现快速排序

void QuickSort(int *arr,int left,int right){

if(right-left+1 > 2){

    int i = 0,storeIndex = left;
    int pivot = left + (int)(rand() % (right-left+1));

    swap(&arr[pivot],&arr[right]);

    for(i = left; i < right; i++){

        if(arr[i] < arr[right]){
            swap(&arr[i],&arr[storeIndex]);
            storeIndex++;
        }
    }

    swap(&arr[storeIndex],&arr[right]);
    QuickSort(arr,left,storeIndex-1);
    QuickSort(arr,storeIndex+1,right);
  }
}

但是这会输出不正确的输出,如

未分类: [81,87,47,59,81,18,25,40,56,0]

排序: [0,18,25,40,56,47,59,81,87,81]

我的算法有问题,因为python中类似的东西工作正常

2 个答案:

答案 0 :(得分:3)

条件显然是错误的:如果你传递一个2元素数组,它将不会被排序,因为:

left = 0
right = 1
right - left + 1 = 2 not greater than 2

答案 1 :(得分:0)

我认为你的for循环应该是一个while循环。