快速排序。代码是用纯 C 语言编写的。这个算法实现有什么问题吗?
void quick_sort(void *base, size_t num, size_t size, int (*comp)(const void*, const void*)) {
unsigned int i = 0, j = num-1;
int rpos = rand() % num;
do {
while(comp((char*)base + size*i, (char*)base + rpos*size) < 0) i++;
while(comp((char*)base + size*j, (char*)base + rpos*size) > 0) j--;
if (i <= j) swap((char*)base + size*i++, (char*)base + size*j--, size);
} while (i <= j);
if (i < num) quick_sort((char*)base, j, size, comp);
if (j > 0) quick_sort((char*)base + size*i, num - i, size, comp);
}
陷入无限递归。
最佳答案
应该有 if(i<=j) swap 和 do 。 。 。 while(i<=j) 不仅仅是 (i < j )。并且交换后还需要增加 i 并减少 j。
有http://www.algolist.net/Algorithms/Sorting/Quicksort有示例代码非常容易理解:)
关于c - 这个快速排序有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102202/