我使用我在维基百科上找到的算法编写了这段代码:
public static void quicksort(int[] arr, int low, int hi)
{
if(low < hi)
{
int pivot = part( arr, low, hi);
quicksort( arr, low, pivot - 1);
quicksort( arr, pivot + 1, hi);
}
}
public static int part(int[] arr, int low, int hi)
{
int pivot = arr[hi];
int i = low;
for(int j = low; j < hi - 1; j++)
{
if(arr[j] <= pivot)
{
swap(arr, i, j);
i++;
}
}
swap(arr, i, hi);
return i;
}
public static void swap(int[] ar, int a, int b)
{
int temp = ar[a];
ar[a] = ar[b];
ar[b] = temp;
}
鉴于此输入:
31, 5, 5, 5, 5, 4, 4, 4, 5, 4
人们应该期望得到:
4, 4, 4, 4, 5, 5, 5, 5, 5, 31
但我得到了:
4, 4, 4, 4, 5, 5, 5, 5, 31, 5
是什么给出了?
我用quicksort(array, 0, array.Length - 1);
答案 0 :(得分:2)
如果您使用Length - 1
调用它,则此循环:
for (int j = low; j < hi - 1; j++)
..应该是:
for (int j = low; j <= hi ; j++)