排序算法合集

排序算法匯總

各類排序算法時(shí)間空間復(fù)雜度如下表所示:


1:直接選擇排序:

排序思想:

選取當(dāng)前最小(最大)的數(shù)據(jù)放置在當(dāng)前狀態(tài)下的最前面的位置窜觉,一直輪循谷炸,直到所有序列都有序?yàn)橹梗?/p>

代碼實(shí)現(xiàn):

    public void sort(int a[]){
        int length = a.length;
        for(int i =0;i<length;i++){
            int min = i;
            for(int j =i+1;j<length;j++){
                if(a[min]>a[j]){
                    min = j;
                }
            }
            if(min !=i){
                int temp = a[i];
                a[i]=a[min];
                a[min]=temp;
            }
        }
    }
}

示例:

[9,5,2,4,3]
i = 0;
根據(jù)內(nèi)部循環(huán),選取當(dāng)前狀態(tài)(i = 0)下最小的的值為2禀挫,此時(shí)下標(biāo)j為3旬陡,將2放置在當(dāng)前狀態(tài)下的最前面a[i]處
該循環(huán)后序列為:
[2,5,9,4,3]
再進(jìn)一步循環(huán),直到i = 5,循環(huán)終止语婴,序列有序 

時(shí)間復(fù)雜度分析:

改排序需要經(jīng)過兩重循環(huán)描孟,假定有n個(gè)元素,則其需要經(jīng)歷n*n次循環(huán)才能結(jié)束砰左,所以其時(shí)間復(fù)雜度為O(n^2)

空間復(fù)雜度分析:

該排序沒有占用額外的存儲(chǔ)空間(臨時(shí)變量常數(shù)級(jí)別)匿醒,所以該排序的空間負(fù)載度為O(1)

2:插入排序

排序思想:

將整個(gè)待排序的序列分成兩個(gè)部分,前半部分是有序的序列缠导,后半部分為無需部分廉羔,然后將后半部分的元素依次添加到前半部分的有序序列中,前半部分為有序序列僻造,因此只需要將后半部分取出來的數(shù)據(jù)插入到合適的位置即可憋他,直到后半部分為空;

代碼實(shí)現(xiàn):

    public void sort(int target[]){
        int length = target.length;
        for(int i=1;i<length;i++){
            for(int j = i;j>0;j--){
                if(target[j]>target[j-1]) {
                    int temp = target[j];
                    target[j]=target[j-1];
                    target[j-1]=temp;
                }else{
                    break;
                }
            }
        }
    }

示例:

[1,4,2,5,3]
將數(shù)據(jù)分成兩個(gè)序列[1] 和 [4,2,5,3]
將4 加入到前半部分中,此時(shí)序列為[1,4] 和 [2,5,3]
將2 加入到前半部分中,此時(shí)序列為[1,2髓削,4] 和 [5,3]
直到最后序列有序

時(shí)間復(fù)雜度分析:

該算法基礎(chǔ)步驟執(zhí)行的次數(shù)為:(1+n)*n/2,其數(shù)量級(jí)在n2,因此其時(shí)間復(fù)雜度為O(n2)

最好情況為整個(gè)序列有序竹挡,每次只需移動(dòng)后半部分的一個(gè)元素到前半部分,移動(dòng)次數(shù)為n立膛,故為O(n)

空間復(fù)雜度分析:

該排序沒有占用額外的存儲(chǔ)空間(臨時(shí)變量常數(shù)級(jí)別)揪罕,所以該排序的空間負(fù)載度為O(1)

3:希爾排序

排序思想:

希爾排序(Shell)是插入排序的升級(jí)版,假設(shè)一個(gè)序列是倒敘的宝泵,現(xiàn)在要求對(duì)這個(gè)數(shù)列正序排列好啰,在數(shù)組基數(shù)較大的情況下,將最后的元素移動(dòng)到最前面需要經(jīng)歷n-1次的比較鲁猩,比較次數(shù)較多,元素移動(dòng)較多罢坝,排序效率自然低下廓握,希爾排序,是在這樣的情況下產(chǎn)生的嘁酿,其實(shí)想思想是先將整個(gè)待排元素序列分割成若干個(gè)子序列(由相隔某個(gè)“增量”的元素組成的)分別進(jìn)行直接插入排序隙券,然后依次縮減增量再進(jìn)行排序,待整個(gè)序列中的元素基本有序(增量足夠心炙尽)時(shí)娱仔,再對(duì)全體元素進(jìn)行一次直接插入排序。因?yàn)橹苯硬迦肱判蛟谠鼗居行虻那闆r下(接近最好情況)游桩,效率是很高的牲迫,因此希爾排序在時(shí)間效率上比前兩種方法有較大提高耐朴,這樣元素移動(dòng)跨度較大,效率也自然的得到提升盹憎;

希爾排序的步長(zhǎng)可以自定義筛峭,下面,我選用步長(zhǎng)為3

代碼實(shí)現(xiàn):

    public void sort(int target[]){
        int length = target.length;
        int h = 1;
        while(h<length/3) h = 3*h+1;(步長(zhǎng))
        while(h >=1){
            for(int i = h;i<length;i++){
                for(int j = i;j>=h;j-=h){
                    if(target[j]<target[j-h]){
                        int temp = target[j];
                        target[j]=target[j-h];
                        target[j-h] = temp;
                    }
                }
            }
            h=h/3;
        }
    }

時(shí)間復(fù)雜度分析:

希爾排序的時(shí)間復(fù)雜度與選擇的步長(zhǎng)度有關(guān)

空間復(fù)雜度:

該排序沒有占用額外的存儲(chǔ)空間(臨時(shí)變量常數(shù)級(jí)別)陪每,所以該排序的空間負(fù)載度為O(1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末影晓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子檩禾,更是在濱河造成了極大的恐慌挂签,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盼产,死亡現(xiàn)場(chǎng)離奇詭異饵婆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辆飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門啦辐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜈项,你說我怎么就攤上這事芹关。” “怎么了紧卒?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵侥衬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我跑芳,道長(zhǎng)轴总,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任博个,我火速辦了婚禮怀樟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盆佣。我一直安慰自己往堡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布共耍。 她就那樣靜靜地躺著虑灰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痹兜。 梳的紋絲不亂的頭發(fā)上穆咐,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼对湃。 笑死崖叫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熟尉。 我是一名探鬼主播归露,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼斤儿!你這毒婦竟也來了剧包?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤往果,失蹤者是張志新(化名)和其女友劉穎疆液,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陕贮,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堕油,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肮之。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉缺。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戈擒,靈堂內(nèi)的尸體忽然破棺而出眶明,到底是詐尸還是另有隱情,我是刑警寧澤筐高,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布搜囱,位于F島的核電站,受9級(jí)特大地震影響柑土,放射性物質(zhì)發(fā)生泄漏蜀肘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一稽屏、第九天 我趴在偏房一處隱蔽的房頂上張望扮宠。 院中可真熱鬧,春花似錦狐榔、人聲如沸坛增。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轿偎。三九已至典鸡,卻和暖如春被廓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萝玷。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工嫁乘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昆婿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓蜓斧,卻偏偏與公主長(zhǎng)得像仓蛆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挎春,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 合集 插入排序 1.直接插入排序 思想:每次將一個(gè)待排序的數(shù)據(jù)按照其數(shù)值大小插入到前面已經(jīng)排序好的數(shù)據(jù)中的適當(dāng)位置...
    deffing閱讀 401評(píng)論 0 0
  • 概述 排序有內(nèi)部排序和外部排序看疙,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大直奋,一次不能容納全部...
    蟻前閱讀 5,186評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序能庆,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大脚线,一次不能容納全部...
    每天刷兩次牙閱讀 3,732評(píng)論 0 15
  • 概述排序有內(nèi)部排序和外部排序搁胆,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大邮绿,一次不能容納全部的...
    Luc_閱讀 2,275評(píng)論 0 35
  • 蓋州古城文化藝術(shù)促進(jìn)會(huì) 2017相逢是首歌“與好人同行船逮,為美德點(diǎn)贊※辭舊迎新”年終慶典 聽到《有請(qǐng)主持人上場(chǎng)》背景...
    渤海經(jīng)濟(jì)圈閱讀 1,511評(píng)論 0 1