算法入門-排序算法-快速排序-詳解

一翠储、核心思想

基本思想:從數(shù)組中選取一個(gè)元素f作為排序的參照物,除f之外的元素與f做比較洞难,如果元素大于f舆吮,則將元素放到f后面,如果元素小于f,則將元素放到f前面歪泳。
參照物為f的排序完成后萝勤,將f之前露筒、之后的元素作為新數(shù)組并按照上述基本思想進(jìn)行同樣的排序呐伞;
可以發(fā)現(xiàn):每輪排序之后都可以確定一個(gè)元素的所屬位置

二、過程分析

int[] nums={7,5,3,9,6,8,4};
將第0個(gè)元素作為參照物f慎式,同時(shí)需要確定的是大于f元素與小于f的元素的邊界lt(即lt表示小于f的元素的最右邊的元素伶氢,lt的右邊即為大于f的元素);
初始情況f=nums[0]=7瘪吏;lt=0
從i=1開始遍歷數(shù)組與參照物f作比較癣防,如果nums[i]<f則lt右移一位,如果i與lt不等掌眠,則交換i位置的元素與lt位置的元素(i與lt不相等是因?yàn)楸闅v過程中出現(xiàn)過大于f的元素蕾盯,而lt表示的是小于f的元素的最右邊的元素;將lt加一并交換lt與i位置的元素同樣是因?yàn)閘t表示的是小于f的元素的最右邊的元素)蓝丙;此過程遍歷完成后的結(jié)果為:lt及l(fā)t之前的元素是小于f的级遭,f之后的元素都是大于f的
以上遍歷完成之后對(duì)f之前的數(shù)組及f之后的數(shù)組做同樣的操作即可

三、代碼

    @Test
    public void test13(){
        int[] nums={7,5,3,9,6,8,4};
        quickSort(nums,0,nums.length-1);
    }
    // 交換元素位置
    private void swap(int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }
    
    public void quickSort(int[] nums,int left,int right){
        if (left>=right){
            return;
        }
        int index=partition(nums,left,right);
        quickSort(nums,left,index-1);
        quickSort(nums,index+1,right);
    }
    
    public int partition(int[] nums,int left,int right){
        int f=nums[left];       
        int lt=left;
        for (int i=left+1;i<=right;i++){
            if (nums[i]<f){
                // 當(dāng)前元素小于f渺尘,則將lt右移挫鸽,保證lt是小于f的最右側(cè)的元素
                lt++;              
                // i與lt不相等是因?yàn)楸闅v過程中出現(xiàn)過大于f的元素,lt經(jīng)過自增之后指向大于f的第一個(gè)元素
                if (lt!=i){         
                    // 交換lt與i位置的元素鸥跟,保證lt指向小于f的最右側(cè)元素
                    swap(nums,lt,i);   
                }
            }
        }
        swap(nums,left,lt);
        return lt;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丢郊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子医咨,更是在濱河造成了極大的恐慌枫匾,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拟淮,死亡現(xiàn)場(chǎng)離奇詭異干茉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惩歉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門等脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人撑蚌,你說我怎么就攤上這事上遥。” “怎么了争涌?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵粉楚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)模软,這世上最難降的妖魔是什么伟骨? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮燃异,結(jié)果婚禮上携狭,老公的妹妹穿的比我還像新娘。我一直安慰自己回俐,他們只是感情好逛腿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仅颇,像睡著了一般单默。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘瓦,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天搁廓,我揣著相機(jī)與錄音,去河邊找鬼耕皮。 笑死境蜕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的明场。 我是一名探鬼主播汽摹,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苦锨!你這毒婦竟也來(lái)了逼泣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舟舒,失蹤者是張志新(化名)和其女友劉穎拉庶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秃励,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氏仗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺鲜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆尔。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖币励,靈堂內(nèi)的尸體忽然破棺而出慷蠕,到底是詐尸還是另有隱情,我是刑警寧澤食呻,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布流炕,位于F島的核電站澎现,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏每辟。R本人自食惡果不足惜剑辫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渠欺。 院中可真熱鬧妹蔽,春花似錦、人聲如沸峻堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捐名。三九已至,卻和暖如春闹击,著一層夾襖步出監(jiān)牢的瞬間镶蹋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工赏半, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贺归,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓断箫,卻偏偏與公主長(zhǎng)得像拂酣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仲义,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 上手難度:★★★★ 算法復(fù)雜度:O(nlogn) 排序思想: 預(yù)先設(shè)定三個(gè)空間l為最左邊的索引初始值lt=l, g...
    半理想主義閱讀 242評(píng)論 0 1
  • 數(shù)據(jù)結(jié)構(gòu)與算法 快速排序?yàn)閼?yīng)用最多的排序算法婶熬,因?yàn)榭焖俣侄劽埃撵?焖倥判蚝蜌w并排序一樣赵颅,采用的都是分治思想。 分...
    凱玲之戀閱讀 699評(píng)論 1 0
  • n:數(shù)據(jù)規(guī)模暂刘; 穩(wěn)定:兩個(gè)相等的值在排序前后相對(duì)位置是否改變饺谬,如果不會(huì)改變則成為穩(wěn)定,反之為不穩(wěn)定谣拣; 排序方式:內(nèi)...
    undefined汪少閱讀 840評(píng)論 0 49
  • 以下文章來(lái)源于后端技術(shù)指南針 募寨,作者后端技術(shù)指南針 1.寫在前面 今天一起來(lái)學(xué)習(xí)一下:快速排序及其優(yōu)化 和 STL...
    立0911閱讀 412評(píng)論 0 0
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友森缠。感恩相遇拔鹰!感恩不離不棄。 中午開了第一次的黨會(huì)辅鲸,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,551評(píng)論 0 11