【发布时间】:2015-10-25 15:41:58
【问题描述】:
我有一个快速排序方法测试程序如下:
public class testtt {
public static void main(String[] args){
Integer[] list =new Integer[15];
list[0] =12;
list[1] = 28;
list[2] = 79;
list[3] = 19;
list[4] = 60;
list[5] = 22;
list[6] = 3;
list[7] = 50;
list[8] = 75;
list[9] = 60;
list[10] = 25;
list[11] = 97;
list[12] = 98;
list[13] = 12;
list[14] = 88;
quickSort(list,0,14);
for(int i=0;i<15;i++){
System.out.print(list[i]+"\t");
}
}
private static <E extends Comparable<E>> void quickSort(E[] list, int first, int last) {
if (last > first) {
int pivotIndex;
pivotIndex = partition3(list, first, last);
quickSort(list, first, pivotIndex - 1);
quickSort(list, pivotIndex + 1, last);
}
}
private static <E extends Comparable<E>> int partition3(E[] list, int first, int last) {
int pivotIndex = (first + last) / 2;
E pivot = list[pivotIndex]; // Choose the first element as the pivot
swap(list, last, pivotIndex);
pivotIndex = last;
last--;
do {
// Search forward from left
while (first < last && list[first].compareTo(pivot) <= 0)
first++;
// Search backward from right
while (first <= last && list[last].compareTo(pivot) > 0)
last--;
// Swap two elements in the list
if (last >= first) {
swap(list, first, last);
first++;
last--;
}
} while (last > first);
swap(list, pivotIndex, first);
return first;
}
private static <E> void swap(E[] list, int index1, int index2) {
E tmp = list[index1];
list[index1] = list[index2];
list[index2] = tmp;
}
}
运行输出结果为
3 12 19 22 25 12 28 50 60 60 75 79 88 97 98
未排序...有人能解释一下为什么这个方法出错了吗?我不需要正确版本的快速排序,我只想知道为什么这个错误...我无法在 python 导师或其他什么上进行可视化,因为运行时间超过 3 秒...
【问题讨论】:
-
在每一步之间显示列表的内容,看看哪里出了问题。