对不起,我知道有关于quicksort的一堆问题,但有一个错误,我不能找到。快速排序不正确
public static void QuickSort(int[] sort)
{
QuickSort(sort, 0, sort.Length - 1);
}
private static void QuickSort(int[]sort, int first, int last)
{
int i = first;
int j = last;
int pivot = (i + j)/2;
int temp;
while(i <= j)
{
while(sort[i] < sort[pivot]){i++;}
while(sort[j] > sort[pivot]){j--;}
if(i <= j)
{
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
i++;
j--;
}
}
if(first < j)QuickSort(sort, first, j);
if(last > i)QuickSort(sort, i, last);
}
这似乎不错,但排序这个数组
int[] sortMe = {2,5,6,4,8,9,6,3,21,2,5,4,8,9,6,5,46,6,3};
这样的:
2,2,3,4,3,4,5,5,6,6,5,6,6,8,8,9,9,21,46
,而不是明显的正确的顺序。
尝试对每个非常小的数组进行排序,直到找到一个不起作用的地方,然后通过调试器运行它,并将其与伪代码/它应该做什么比较 – Patashu 2013-04-29 05:49:02
使用此链接http://stackoverflow.com/questions/2095153 /快速排序 - 不正确排序 – Rahul 2013-04-29 05:50:48
不幸的是,在当前状态下,这个问题不太可能对SO访问者有用。如果你想自己编写代码 - 那么做一下,调试(更好地添加基本测试)并使其工作。否则,只需使用现有的排序方法您可以通过显示已经验证过的测试用例(以及添加的单元测试)来改善您的问题。 – 2013-04-29 05:57:07