我正在尝试选择中位数作为此应用中的支点,但似乎我做错了。任何帮助将不胜感激。
我按顺序得到前几个数字然后到最后。
public class QuickSort {
public static void main(String[] args) {
int [] list = {1,3,2,4,6,5,8,7,9,0};
quickSort (list);
for (int i=0; i < list.length; i++)
System.out.print(list[i] + " ");
}
public static void quickSort(int [] list)
{
quickSort(list, 0, list.length - 1);
}
public static void quickSort (int[] list, int first, int last)
{
int size = last - first + 1;
if (size > 3){
int median1 = median(list, first, last);
int partition1 = partition(list, first, last, median1);
quickSort(list, first, partition1 - 1);
quickSort(list, partition1 + 1, last);
}
}
public static int median(int [] list, int first1, int last1){
int middle = (first1 + last1)/2;
if (list[first1] > list[middle])
swap(list, first1, middle);
if (list[first1] > list[last1])
swap(list, first1, last1);
if (list[middle] > list[last1])
swap(list, middle, last1);
swap(list, middle, last1 - 1);
return list[last1 - 1 ];
}
public static int partition(int [] list, int left, int right, long pivot) {
int leftPtr = left;
int rightPtr = right - 1;
while (true) {
while (list[++leftPtr] < pivot);
while (list[--rightPtr] > pivot);
if (leftPtr >= rightPtr)
break;
else
swap(list, leftPtr, rightPtr);
}
swap(list, leftPtr, right - 1);
return leftPtr;
}
public static void swap(int []list, int dex1, int dex2) {
int temp = list[dex1];
list[dex1] = list[dex2];
list[dex2] = temp;
}
我按顺序得到一些数字,但不是全部。
答案 0 :(得分:1)
通常有两种方法可用于计算机编程。你可以a)采取有效的方法,开始删除/改变东西,直到你得到你喜欢的东西。或b)采取最小的案例 - 使其发挥作用 - 然后继续增加更多的复杂性。 在这种情况下,我建议b)(FYI b)通常是最好的方法)
如果以int [] list = {3,1,}开头,则可以看到列表未正确排序。 这是因为你的quickSort函数只对大小大于3的列表进行排序。在你的情况下,这个条件可能应该是“size&gt; 1” - 尽管为了让事情有效,你可能需要做更多的事情。
维基百科上有很多关于QuickSort的信息: http://en.wikipedia.org/wiki/Quicksort