1
我有这样的代码,我使用的算法我在维基百科上找到写道:鉴于此输入快速排序算法不排序最终元素?
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,array.Length)' –
当我这样做时,超出数组的边界。零索引意味着较高的索引比长度小一个。 –