2018-09-08

排序算法

我們通常所說的排序算法是指內(nèi)部排序算法酪夷,即數(shù)據(jù)記錄在內(nèi)存中進行排序毡代。

排序算法大致分為兩種:

一種是比較排序,時間復雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序葵袭,插入排序,歸并排序,堆排序欠窒,快速排序等。

另一種是非比較排序退子,時間復雜度可以達到O(n)贱迟,主要有:計數(shù)排序姐扮,基數(shù)排序,桶排序等


算法的穩(wěn)定性:冒泡衣吠,直接插入茶敏,歸并

算法的穩(wěn)定性是指若Ai=Aj,在排序之前的相對順序是Ai在Aj之前,那么進行排序之后Ai還應該在Aj之前缚俏,即算法是穩(wěn)定的

內(nèi)部排序算法:

1.冒泡排序

核心思想:

1.比較相鄰元素惊搏,如果前一個比后一個大,就把它們兩個調(diào)換位置忧换。

對每一對相鄰元素作同樣的工作恬惯,從開始第一對到結(jié)尾的最后一對。這步做完后亚茬,最后的元素會是最大的數(shù)酪耳。

2.針對所有的元素重復以上的步驟,除了最后一個刹缝。

3.持續(xù)每次對越來越少的元素重復上面的步驟碗暗,直到?jīng)]有任何一對數(shù)字需要比較。



簡單優(yōu)化冒泡排序:


2.選擇排序

核心算法:選擇排序也是一種簡單直觀的排序算法梢夯。(以從小到大的排序為例言疗。)

1、初始時在序列中找到最小元素颂砸,放到序列的起始位置作為已排序序列噪奄;

2、然后人乓,再從剩余未排序元素中繼續(xù)尋找最小元素勤篮,放到已排序序列的末尾。以此類推色罚,直到所有元素均排序完畢碰缔。


選擇排序示意圖




3.插入排序

插入算法用于滿足一定條件時,可以提前結(jié)束保屯,所以插入排序?qū)τ诮朴行虻男蛄衼碚f手负,效率很高。插入算法通常與其他排序算法進行組合姑尺,從而減少運行時間

核心思想:1.將元素拿出來

? ? ? ? ? ? ? ? ? ?2.將符合條件的元素后移


4.希爾排序

希爾排序是對插入排序的一個改進竟终,首先引入分組的思想,從而將算法的時間復雜度降低到O(nlogn)


希爾排序示意圖


5.快速排序

核心思想:

對于一個無序list切蟋,取index為0的元素作為中間數(shù)统捶,然后執(zhí)行分區(qū)函數(shù),讓比中間數(shù)小的點都在中間數(shù)左邊,比中間數(shù)大的點都在中間數(shù)右邊喘鸟。此時得到了一個看似有序其實無序的list:

有序體現(xiàn)在此時list分成了兩個區(qū)域匆绣,左邊的都比中間數(shù)小,右邊的都比中間數(shù)大什黑。

無序體現(xiàn)在崎淳,而這兩個區(qū)域,又都是無序的list

算法步驟:

1.基準點選取:快速排序首先需要先選擇一個值作為基準點愕把,一般選擇是arr[0]拣凹,但是當數(shù)據(jù)出現(xiàn)近乎有序時,則比較復雜恨豁。因此基準點一般是隨機選取一個值嚣镜,在數(shù)學上會以很大的概率使算法的復雜度接近(O(nlogn)),極小的概率為O(n^2)

2.我們對這兩個無序的list再次調(diào)用分區(qū)函數(shù)橘蜜,此時會得到四個看似有序而又無序的list菊匿,接著調(diào)用分區(qū)函數(shù),直到最終list長度為2時计福,再調(diào)用一次分區(qū)函數(shù)跌捆,那么一定是左邊有序并且小于右邊,因此此時所有的子列表都是有序的棒搜,那么此時一整個list也就是一個有序的list了疹蛉。

左邊的無序區(qū)域為nums[first:index-1]

右邊的無序區(qū)域為nums[index+1,last]

代碼如下:



6.歸并排序:

最易于理解的白話:首先考慮下如何將將二個有序數(shù)列合并

1活箕、這個非常簡單力麸,只要從比較二個數(shù)列的第一個數(shù),誰小就先取誰育韩,取了后就在對應數(shù)列中刪除這個數(shù)克蚂。

2、然后再進行比較筋讨,如果有數(shù)列為空埃叭,那直接將另一個數(shù)列的數(shù)據(jù)依次取出即可。

比如悉罕,13跟24678合并赤屋。

1跟2比較,1小于2壁袄,那么list.append(1)类早。

3跟2比較,2小于3嗜逻,那么list.append(2)

3跟4比較涩僻,3小于4,那么list.append(3)

left數(shù)列已經(jīng)為空,那么就把right的數(shù)列都append到list中逆日。

核心思想:

那么歸并排序呢嵌巷,一樣的道理。但是不一樣的地方就是室抽,一開始不是兩個有序list搪哪,而是是一整個無序list,為了滿足“兩個坪圾,有序”的要求噩死,我們分兩步:

1、先把list分成left和right兩個無序的部分

2神年、把這兩個無序的部分已维,調(diào)用函數(shù)排成兩個有序的部分

這里的兩個無序的部分怎么排序成有序的部分呢。就是遞歸調(diào)用歸并排序函數(shù)了已日。

3垛耳、對兩個有序的部分,進行上面的merge操作即可飘千。

其中遞歸的地方就是堂鲜,上面的第二步中,上面的





?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末护奈,一起剝皮案震驚了整個濱河市缔莲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霉旗,老刑警劉巖痴奏,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厌秒,居然都是意外死亡读拆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門鸵闪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來檐晕,“玉大人,你說我怎么就攤上這事蚌讼”倩遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵篡石,是天一觀的道長芥喇。 經(jīng)常有香客問我,道長夏志,這世上最難降的妖魔是什么乃坤? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任苛让,我火速辦了婚禮,結(jié)果婚禮上湿诊,老公的妹妹穿的比我還像新娘狱杰。我一直安慰自己,他們只是感情好厅须,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布仿畸。 她就那樣靜靜地躺著,像睡著了一般朗和。 火紅的嫁衣襯著肌膚如雪错沽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天眶拉,我揣著相機與錄音千埃,去河邊找鬼。 笑死忆植,一個胖子當著我的面吹牛放可,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朝刊,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耀里,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拾氓?” 一聲冷哼從身側(cè)響起冯挎,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咙鞍,沒想到半個月后房官,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡奶陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年易阳,在試婚紗的時候發(fā)現(xiàn)自己被綠了附较。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吃粒。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拒课,靈堂內(nèi)的尸體忽然破棺而出徐勃,到底是詐尸還是另有隱情,我是刑警寧澤早像,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布僻肖,位于F島的核電站,受9級特大地震影響卢鹦,放射性物質(zhì)發(fā)生泄漏臀脏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揉稚。 院中可真熱鬧秒啦,春花似錦、人聲如沸搀玖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灌诅。三九已至芳来,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猜拾,已是汗流浹背即舌。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挎袜,地道東北人侥涵。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像宋雏,于是被迫代替她去往敵國和親芜飘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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

  • 排序算法說明 (1)排序的定義:對一序列對象根據(jù)某個關(guān)鍵字進行排序磨总; 輸入:n個數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 660評論 0 0
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系嗦明,并對這種結(jié)構(gòu)定義相應的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,800評論 0 13
  • Ba la la la ~ 讀者朋友們蚪燕,你們好啊娶牌,又到了冷鋒時間,話不多說馆纳,發(fā)車诗良! 1.冒泡排序(Bub...
    王飽飽閱讀 1,797評論 0 7
  • 豆醬水煮魚是潮汕人做魚的代表作,鮮美又低碳健康鲁驶,普寧豆醬在潮州菜調(diào)料里堪稱一寶鉴裹,做魚、做肉钥弯、做湯径荔、炒菜、拌菜都是絕...
    潮音潮人閱讀 527評論 0 1
  • 現(xiàn)在的娛樂圈脆霎,看似風平浪靜总处,實則暗流涌動。怎一個亂字了得睛蛛! 讓我們切換一下鏡頭鹦马,回到一千多年前的唐朝胧谈,那時的娛樂圈...
    貓頭鷹dsa閱讀 5,142評論 2 8