快速排序法

快速排序法的思想:

  通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。

代碼如下:

剛開始還是有點難理解的,看了別人的代碼,再理解起來就比較容易了,做過小的總結,只爲遇見更好的自己。
/**
 * 快速排序算法
 * 
 * @author HeHuan
 *
 */
public class Quick {

    public static void main(String[] args) {
        int a[] = { 12, 15, 9, 20, 6, 31, 24 };

        quickSort(a, 0, a.length - 1);
        System.out.println(Arrays.toString(a));

    }

    /**
     * 分治法的思想加遞歸
     * @param a 數組
     * @param low 數組的最低位
     * @param high 數組的最高位
     */
    public static void quickSort(int[] a, int low, int high) {
        if (low < high) {
            int middle = getMiddle(a, low, high);// 獲取中間的數值,
            quickSort(a, low, middle - 1);// 排序左邊的數據
            quickSort(a, middle + 1, high);// 排序右邊的數據
        }
    }

    private static int getMiddle(int[] a, int low, int high) {
        int temp = a[low];// 取數組的第一個值爲初始值,與最右邊的值進行對比
        while (low < high) {
            while (temp < a[high] && low < high) {// 如果小於最後邊的值
                high--;
            }
            a[low] = a[high];// 如果temp大於右邊的值,填坑到low的位置,high的位置空了出來
            while (temp > a[low] && low < high) {// 如果大於左邊的值
                low++;
            }
            a[high] = a[low];// 如果temp小於左邊的值,高位被填坑,low位又被騰出來
        }
        a[low] = temp;//最後把temp值給low位,位置也就固定了,不會再改變,這時候low = high
        return high;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章