选择中位数作为支点

时间:2013-03-22 02:48:09

标签: java sorting median

我正在尝试选择中位数作为此应用中的支点,但似乎我做错了。任何帮助将不胜感激。

我按顺序得到前几个数字然后到最后。

    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;
            }

我按顺序得到一些数字,但不是全部。

1 个答案:

答案 0 :(得分:1)

通常有两种方法可用于计算机编程。你可以a)采取有效的方法,开始删除/改变东西,直到你得到你喜欢的东西。或b)采取最小的案例 - 使其发挥作用 - 然后继续增加更多的复杂性。 在这种情况下,我建议b)(FYI b)通常是最好的方法)

如果以int [] list = {3,1,}开头,则可以看到列表未正确排序。 这是因为你的quickSort函数只对大小大于3的列表进行排序。在你的情况下,这个条件可能应该是“size&gt; 1” - 尽管为了让事情有效,你可能需要做更多的事情。

维基百科上有很多关于QuickSort的信息: http://en.wikipedia.org/wiki/Quicksort