我已经用Java编写了我的快速排序版本,但是在调用第二个递归时遇到了一个问题。这是我的代码:
public static int[] quickSort(int[] array, int start, int end) {
int pIndex;
if (start < end) {
int left = start;
int right = end - 1;
int pivot = array[end];
//Start the partitioning
while (left < right) {
if (array[left] > pivot && array[right] < pivot) {
int temp = array[left];
array[left] = array[right];
array[right] = temp;
left++;
right--;
} else if (array[left] > pivot)
right--;
else
left++;
}
if (array[end] < array[left]) {
int temp = array[left];
array[left] = array[end];
array[end] = temp;
pIndex = left;
} else
pIndex = end;
//End partitioning
quickSort(array, 0, pIndex - 1);
quickSort(array, pIndex + 1, array.length - 1);
}
return array;
}
参数start将是数组中第一个元素的索引,参数end将是最后一个元素的索引,我选择了最后一个元素作为枢轴。
我遇到的问题是quickSort(array,pIndex + 1,array.length-1);
array.length-1导致此操作无限进行,因为它是引用原始数组的。有什么办法可以解决这个问题,而不必每次都将新数组传递给函数?
我确实尝试创建一个全局变量来存储新的长度,但是我做得不太正确。
提前致谢。
如果代码不是Sort的很好实现,我感到很抱歉。我想自己一个人写一个,但结果还是遇到了问题。
在快速排序使用递归的正确方法是使用start
,pivot
和end
。
您似乎正在使用包含端索引;那么您将需要递归到
quicksort(data, start, pivot - 1)
quicksort(data, pivot + 1, end)
枢轴元件已经处于其最终位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句