c - 永无止境的快速排序

标签 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; 
}

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

最佳答案

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

然后,如果 j 是枢轴元素的最终位置,则左侧数组应按快速排序(array,j)而不是 j-1 排序。

关于c - 永无止境的快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425710/

相关文章:

c++ - cout 不起作用时如何检测无限循环?

migration - Orchard CMS 中奇怪的分类迁移问题(1.6 到 1.7.2)

C 循环中的情况问题

C函数原型(prototype)编译错误

c - malloced 指针中的内存泄漏?

c# - 如何在 C# 中处理无限循环

java - 修改后的快速排序可以是 O(n) 的最佳情况吗?

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

c++ - 排序给出最后位置元素的错误输出

c - 这个表达式是什么意思,为什么编译?