1. 程式人生 > >java 實現快速排序

java 實現快速排序

  快速排序是對氣泡排序的一種改進,它的基本思想是:通過一趟排序將要排序的部分分割成獨立的兩部分,其中一部分的資料比另一部分的資料都要小,然後對這兩部分資料在快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。      其實快速排序的核心思想就是分治法,分治演算法的基本思想是將一個規模為N的問題分解為K個規模較小的子問題,這些子問題相互獨立且與原問題性質相同。

程式碼實現:

/**
     * 快速排序的遞迴實現
     * @param numbers
     * @param low
     * @param high
     */
    public static void quickSort(int[] numbers,int low,int high)
    {
        if(low < high)
        {
           int middle = getMiddle(numbers,low,high); //將numbers陣列進行一分為二
           quickSort(numbers, low, middle-1);   //對低欄位表進行遞迴排序
           quickSort(numbers, middle+1, high); //對高欄位表進行遞迴排序
        }

    }
/**
     * 查找出中軸(預設是最低位low)的在numbers陣列排序後所在位置
     *
     * @param numbers 帶查詢陣列
     * @param low   開始位置
     * @param high  結束位置
     * @return  中軸所在位置
     */
    public static int getMiddle(int[] numbers, int low,int high)
    {
        int temp = numbers[low]; //陣列的第一個作為中軸
        while(low < high)
        {
            while(low < high && numbers[high] >= temp)
            {
                high--;
            }
            numbers[low] = numbers[high];//比中軸小的記錄移到低端
            while(low < high && numbers[low] <= temp)
            {
                low++;
            }
            numbers[high] = numbers[low] ; //比中軸大的記錄移到高階
        }
        numbers[low] = temp ; //中軸記錄到尾
        return low ; // 返回中軸的位置
    }

test:

 int arr[] = {21,2,3,4,77,3,22,11,12,32,0};
  Log.e("sort", Arrays.toString(arr));
  quickSort(arr,0,10);
  Log.e("sort", Arrays.toString(arr));