java八種排序算法---快速排序


    快速排序基本思想:挖坑填數+遞歸分治

    快速排序使用分治法的策略,把一個串行分成2個子串行,快速排序又是一種分而治之的思想在排序算法是上的典型應用,本質上看,快速排序應該算冒泡排序基礎上的遞歸分治法,快速排序名字簡單粗暴,顧名思義就是快而且效率高,它是處理大數據最快的算法之一了。

    算法描述:
1、從數列中任意挑出一個數作為基准(pivot)

2、重新排序,所有比基准大的數放在基准左邊,所有比基准大的數放在基准右邊,這樣排序一遍后該基准就位於數列的中間,這個就被稱為分區操作(partition)

3、遞歸地把小於基准的數列和大於基准的數列進行排序

遞歸到最底部時,數列的大小是0或1,也就是已經排序好了,這個算法一定會結束,因為每次迭代的時候它至少會把一個元素排到最后的位置去

public static void sort(int[] a, int low, int high) {
    //已經排完
    if (low >= high) {
        return;
    }
    int left = low;
    int right = high;

    //保存基准值
    int pivot = a[left];
    while (left < right) {
        //從后向前找到比基准小的元素
        while (left < right && a[right] >= pivot)
            right--;
        a[left] = a[right];
        //從前往后找到比基准大的元素
        while (left < right && a[left] <= pivot)
            left++;
        a[right] = a[left];
    }
    // 放置基准值,准備分治遞歸快排
    a[left] = pivot;
    sort(a, low, left - 1);
    sort(a, left + 1, high);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM