永无止境的快速排序

时间:2015-05-24 16:25:15

标签: c infinite-loop quicksort gcc4.9

我尝试在int64_t数组上实现快速排序,如下所示:

void quicksort (int64_t *array,size_t size) { 
    int64_t *split;
    size_t i=0;
    size_t j=size-1;
    if (size>1) {
    split=({
      int64_t p=array[0];
      do {
           for (;array[i]<p;i++);
           for (;array[j]>p;j--);
           swap(array[i],array[j]);
      } while (i<j);
      swap(array[i],array[j]);
      swap(array[j],array[size]);
      &(array[j]);
      })-1;
    quicksort(array,j-1);
    quicksort(split+1,size-j);
    }
    return; 
}

哪个好,但是,它在第​​一次分区传递后立即进入无限递归或无限循环。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您的分区代码看起来很奇怪,至少有一些问题: for(; a [i]&lt; p; i ++)不保证终止。

然后如果j是pivot元素的最终位置,你的左数组应该按quicksort(array,j)而不是j-1排序。

答案 1 :(得分:0)

我无法编译代码(我的编译器已经过时了)。但不应该:

size_t i=0; 

因为你有

而被初始化为1
int64_t p=array[0];  // partition element?

for (;array[i]<p;i++);

这可能不是唯一的问题。