Java常用的7大排序算法匯總

1.插入排序算法

插入排序的基本思想是在遍歷數(shù)組的過程中懂诗,假設(shè)在序號(hào) i 之前的元素即 [0..i-1] 都已經(jīng)排好序敷硅,本趟需要找到 i 對(duì)應(yīng)的元素 x 的正確位置 k ,并且在尋找這個(gè)位置 k 的過程中逐個(gè)將比較過的元素往后移一位,為元素 x “騰位置”好渠,最后將 k 對(duì)應(yīng)的元素值賦為 x 弦撩,一般情況下步咪,插入排序的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 O(n2 ) 和 O(1)。

2.選擇排序算法

選擇排序的基本思想是遍歷數(shù)組的過程中益楼,以 i 代表當(dāng)前需要排序的序號(hào)猾漫,則需要在剩余的 [i…n-1] 中找出其中的最小值,然后將找到的最小值與 i 指向的值進(jìn)行交換感凤。因?yàn)槊恳惶舜_定元素的過程中都會(huì)有一個(gè)選擇最大值的子流程悯周,所以人們形象地稱之為選擇排序。選擇排序的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 O(n2 ) 和 O(1) 陪竿。

3.冒泡排序算法

冒泡排序是將比較大的數(shù)字沉在最下面禽翼,較小的浮在上面

4.快速排序算法

通過一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可以分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排序,已達(dá)到整個(gè)序列有序的目的,本質(zhì)就是,找一個(gè)基位(樞軸,分水嶺,作用是左邊的都比它小,右邊的都比它大族跛。

可隨機(jī),取名base闰挡,首先從序列最右邊開始找比base小的,如果小,換位置,從而base移到剛才右邊(比較時(shí)比base小)的位置(記為臨時(shí)的high位),這樣base右邊的都比base大。然后,從序列的最左邊開始找比base大的礁哄,如果大,換位置,從而base移動(dòng)到剛才左邊(比較時(shí)比base大)的位置(記為臨時(shí)的low位),這樣base左邊的都比base小长酗,循環(huán)以上兩步,直到 low == heigh, 這使才真正的找到了樞軸,分水嶺. 返回這個(gè)位置,分水嶺左邊和右邊的序列,分別再來遞歸。


5.合并排序算法

歸并排序采用的是遞歸來實(shí)現(xiàn)桐绒,屬于“分而治之”夺脾,將目標(biāo)數(shù)組從中間一分為二,之后分別對(duì)這兩個(gè)數(shù)組進(jìn)行排序掏膏,排序完畢之后再將排好序的兩個(gè)數(shù)組“歸并”到一起劳翰,歸并排序最重要的也就是這個(gè)“歸并”的過程,歸并的過程中需要額外的跟需要?dú)w并的兩個(gè)數(shù)組長(zhǎng)度一致的空間

6.希爾排序算法

希爾排序的誕生是由于插入排序在處理大規(guī)模數(shù)組的時(shí)候會(huì)遇到需要移動(dòng)太多元素的問題馒疹。希爾排序的思想是將一個(gè)大的數(shù)組“分而治之”佳簸,劃分為若干個(gè)小的數(shù)組。

以 gap 來劃分颖变,比如數(shù)組 [1, 2, 3, 4, 5, 6, 7, 8] 生均,如果以 gap = 2 來劃分,可以分為 [1, 3, 5, 7] 和 [2, 4, 6, 8] 兩個(gè)數(shù)組(對(duì)應(yīng)的腥刹,如 gap = 3 马胧, 則劃分的數(shù)組為: [1, 4, 7] 、 [2, 5, 8] 衔峰、 [3, 6] )然后分別對(duì)劃分出來的數(shù)組進(jìn)行插入排序佩脊,待各個(gè)子數(shù)組排序完畢之后再減小 gap 值重復(fù)進(jìn)行之前的步驟蛙粘,直至 gap = 1 ,即對(duì)整個(gè)數(shù)組進(jìn)行插入排序威彰。

此時(shí)的數(shù)組已經(jīng)基本上快排好序了出牧,所以需要移動(dòng)的元素會(huì)很小很小,解決了插入排序在處理大規(guī)模數(shù)組時(shí)較多移動(dòng)次數(shù)的問題歇盼,希爾排序是插入排序的改進(jìn)版舔痕,在數(shù)據(jù)量大的時(shí)候?qū)π实奶嵘龓椭艽螅瑪?shù)據(jù)量小的時(shí)候建議直接使用插入排序就好了豹缀。

7.堆排序算法

本質(zhì)就是先構(gòu)造一個(gè)大頂堆,parent比children大,root節(jié)點(diǎn)就是最大的節(jié)點(diǎn) 把最大的節(jié)點(diǎn)(root)與尾節(jié)點(diǎn)(最后一個(gè)節(jié)點(diǎn),比較小)位置互換伯复,剩下最后的尾節(jié)點(diǎn),現(xiàn)在最大,其余的,從第一個(gè)元素開始到尾節(jié)點(diǎn)前一位,構(gòu)造大頂堆遞歸。

最新的TIOBE指數(shù)顯示邢笙,Java編程已經(jīng)超過了20%的普及門檻啸如,這意味著每五行源代碼當(dāng)中就有一行采用Java編寫。這不是Java語言有史以來最高分鸣剪,它曾在多年前和C與C++語言競(jìng)爭(zhēng)當(dāng)中失去了頭把交椅组底,但現(xiàn)在可能已經(jīng)卷土重來。

學(xué)習(xí)Java的同學(xué)注意了?鸷А!江滨!

學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話铛纬,歡迎加入Java學(xué)習(xí)交流群346942462,我們一起學(xué)Java唬滑!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末告唆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晶密,更是在濱河造成了極大的恐慌擒悬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稻艰,死亡現(xiàn)場(chǎng)離奇詭異懂牧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尊勿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門僧凤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人元扔,你說我怎么就攤上這事躯保。” “怎么了澎语?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵途事,是天一觀的道長(zhǎng)验懊。 經(jīng)常有香客問我,道長(zhǎng)尸变,這世上最難降的妖魔是什么鲁森? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮振惰,結(jié)果婚禮上歌溉,老公的妹妹穿的比我還像新娘。我一直安慰自己骑晶,他們只是感情好痛垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桶蛔,像睡著了一般匙头。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仔雷,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天蹂析,我揣著相機(jī)與錄音,去河邊找鬼碟婆。 笑死电抚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竖共。 我是一名探鬼主播蝙叛,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼公给!你這毒婦竟也來了借帘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤淌铐,失蹤者是張志新(化名)和其女友劉穎肺然,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腿准,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡际起,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了释涛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片加叁。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唇撬,靈堂內(nèi)的尸體忽然破棺而出它匕,到底是詐尸還是另有隱情,我是刑警寧澤窖认,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布豫柬,位于F島的核電站告希,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏烧给。R本人自食惡果不足惜燕偶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望础嫡。 院中可真熱鬧指么,春花似錦、人聲如沸榴鼎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巫财。三九已至盗似,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間平项,已是汗流浹背赫舒。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闽瓢,地道東北人接癌。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸳粉,于是被迫代替她去往敵國(guó)和親扔涧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 排序的基本概念 在計(jì)算機(jī)程序開發(fā)過程中届谈,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個(gè)關(guān)鍵字進(jìn)行排序,排序完成的序列可用于快...
    Jack921閱讀 1,421評(píng)論 1 4
  • 總結(jié)一下常見的排序算法弯汰。 排序分內(nèi)排序和外排序艰山。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,336評(píng)論 0 1
  • Ba la la la ~ 讀者朋友們咏闪,你們好啊曙搬,又到了冷鋒時(shí)間,話不多說鸽嫂,發(fā)車纵装! 1.冒泡排序(Bub...
    王飽飽閱讀 1,790評(píng)論 0 7
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序据某,而外部排序是因排序的數(shù)據(jù)很大橡娄,一次不能容納全部的...
    Luc_閱讀 2,259評(píng)論 0 35
  • 她與同事走在夜深人靜的街道上,暗黃的路燈昏昏欲睡癣籽,看了看手表挽唉,凌晨2點(diǎn)25分滤祖。再向前一點(diǎn),只要800米瓶籽,就可以到租...
    黎夜行閱讀 217評(píng)論 0 0