成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我的算法筆記—快速排序

superw / 1587人閱讀

摘要:算法介紹由在年提出,因?yàn)榇怂惴ǘ@得圖靈獎(jiǎng)。它是一種遞歸算法,核心思想是先找出一個(gè)數(shù)的應(yīng)該在的位置,將數(shù)列分為左右兩部分,左右兩部分分別進(jìn)行排序。

算法介紹

由C.A.R.Hoare在1962年提出,因?yàn)榇怂惴ǘ@得圖靈獎(jiǎng)。它是一種遞歸算法,核心思想是:先找出一個(gè)數(shù)的應(yīng)該在的位置,將數(shù)列分為左右兩部分,左右兩部分分別進(jìn)行排序。

圖片示例

我們先找到 K 的位置,i 指針先向后移動(dòng),所指元素如果比K大,就停止,此時(shí)再由 j 由隊(duì)尾向前遍歷,如果 j 指向元素比K小,j 停止移動(dòng),此時(shí)將 i 和 j 指向元素對調(diào)。
比如:

此時(shí) i 指向元素R比 K 大,j 指向元素C比K小 ,對調(diào)R,C。

此時(shí) i j 根據(jù)上述規(guī)則 繼續(xù)移動(dòng),一直到 指針 j 超過了i ,K 和 j 對調(diào)

此時(shí)K已經(jīng)在位置上了,將數(shù)列分為左右兩邊,左右再進(jìn)行遞歸排序

實(shí)現(xiàn)代碼
//主方法
private static void sort(Comparable[] a, int lo, int hi) {
        if (lo >= hi) {
            return;
        }
        int j = partition(a, lo, hi);
        sort(a, 0, j - 1);
        sort(a, j + 1, hi);
    }

private static int partition(Comparable[] a, int lo, int hi) {
        int i = lo ;
        int j = hi+1;
//a[lo]即為第一個(gè)元素,先將它的位置找到
        while (true){
// 找到 i ,i 小于 a[lo]的話,繼續(xù)移動(dòng)
            while (less(a[++i],a[lo])){
                if(i == hi){
                    break;
                }
            }
// j 也類似
            while (less(a[lo],a[--j])){
                if(j==lo){
                    break;
                }
            }
// 兩指針擦肩而過的話,就跳出循環(huán)
            if(i>=j){
                break;
            }
// 交換 i和j
            change(a,i,j);
        }
// 交換 lo和j
        change(a,lo,j);
        return j;
    }
復(fù)雜度推導(dǎo)

假設(shè) Cn 為快速排序N個(gè)數(shù)需要比較的次數(shù)。
找到第一個(gè)數(shù)所在位置,我們需要比較 N+1次。指針 i 和 j 每移動(dòng)一次就需要比較一次,一共是 N-1次, 加上相遇比較一次 ,擦肩而過還需要比較一次,所以是N+1次。
這個(gè)數(shù)會(huì)把數(shù)組分割成各種情況,會(huì)分割成(1,n-1),(2,n-2),(3,n-3).......(n-1,1)各種情況,所以Cn的表達(dá)式如下:


平均復(fù)雜度為1.39NlgN

缺點(diǎn)與不足
 1. 為了保證性能,快速排序前一定要打亂數(shù)組順序,正序下,快排復(fù)雜度需要1/2 
    乘以n的二次方
    

 2. 如果數(shù)組存在大量相同的數(shù),性能也是平方級的
 
 

第一次寫博客,這是我的理解,如果有誤請指出,我會(huì)立即糾正,謝謝

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69118.html

相關(guān)文章

  • 算法算法圖解筆記_算法簡介

    摘要:在本書中你將學(xué)習(xí)比較不同算法的優(yōu)缺點(diǎn)該使用合并排序算法還是快速排序算法或者該使用數(shù)組還是鏈表。這樣的算法包括快速排序一種速度較快的排序算法。 在讀《算法圖解》這本書,這本書有兩個(gè)優(yōu)點(diǎn): 手繪風(fēng)格的圖,看著很讓人入戲; 算法采用Python語言描述,能更好的表達(dá)算法思想。 關(guān)于算法的學(xué)習(xí)有兩點(diǎn)心得: 算法思想最重要,理解了思想,算法是很容易寫出來的,所以盡量不要把過多精力放在細(xì)節(jié)上...

    tomlingtm 評論0 收藏0
  • 算法學(xué)習(xí)筆記排序算法(二)

    摘要:上一篇中已經(jīng)介紹了幾個(gè)簡單的排序算法,這一篇文章我將繼續(xù)向大家介紹排序算法相關(guān)的內(nèi)容,本篇的會(huì)介紹希爾排序快速排序歸并排序以及分治算法的思想,希望通過本文章能夠加深大家對排序算法的理解。 上一篇中已經(jīng)介紹了幾個(gè)簡單的排序算法,這一篇文章我將繼續(xù)向大家介紹排序算法相關(guān)的內(nèi)容,本篇的會(huì)介紹希爾排序、快速排序、歸并排序以及分治算法的思想,希望通過本文章能夠加深大家對排序算法的理解。 希爾排序...

    William_Sang 評論0 收藏0
  • 算法算法圖解筆記_選擇排序

    摘要:選擇排序是下一章將介紹的快速排序的基石。需要存儲(chǔ)多項(xiàng)數(shù)據(jù)時(shí)有兩種基本方式數(shù)組和鏈表。但它們并非都適用于所有的情形因此知道它們的差別很重要。選擇排序是一種靈巧的算法但其速度不是很快。 選擇排序是下一章將介紹的快速排序的基石。 內(nèi)存的工作原理 計(jì)算機(jī)就像是很多抽屜的集合體,每個(gè)抽屜都有地址。showImg(https://segmentfault.com/img/bVbpWvv?w=413...

    mylxsw 評論0 收藏0
  • 算法算法圖解筆記_快速排序

    摘要:再談大表示法快速排序的獨(dú)特之處在于其速度取決于選擇的基準(zhǔn)值。在平均情況下快速排序的運(yùn)行時(shí)間為在最糟情況下退化為??焖倥判蚝秃喜⑴判虻乃惴ㄋ俣确謩e表示為和,是算法所需的固定時(shí)間量被稱為常量。 分而治之 分而治之(divide and conquer,D&C)是一種著名的遞歸式問題解決方法。只能解決一種問題的算法畢竟用處有限,而D&C提供了解決問題的思路,是另一個(gè)可供你使用的工具。 D&C...

    YanceyOfficial 評論0 收藏0
  • 思維導(dǎo)圖整理大廠面試高頻數(shù)組24: 合并兩個(gè)有序數(shù)組的兩種雙指針?biāo)枷? 力扣88

    摘要:此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納整理出最重要的思路和知識(shí)重點(diǎn)并以思維導(dǎo)圖形式呈現(xiàn)當(dāng)然也會(huì)加上我對導(dǎo)圖的詳解目的是為了更方便快捷的記憶和回憶算法重點(diǎn)不用每次都重復(fù)看題解畢竟算法不是做了一遍就能完全記住的所 ...

    darkerXi 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<