排序算法中的初級排序算法

排序就是將一組對象按照某種邏輯順序重新排列的過程奕删。比如,信用卡賬單中的交易是按照日期排序的——這種排序很可能使用了某種排序算法。在計(jì)算時代早期孕暇,大家普遍認(rèn)為30%的計(jì)算周期都用在了排序上。如果今天這個比例降低了,可能的原因之一是如今的排序算法更加高效妖滔,而并非排序的重要性降低了∷硐現(xiàn)在計(jì)算機(jī)的廣泛使用使得數(shù)據(jù)無處不在,而整理數(shù)據(jù)的第一步通常就是進(jìn)行排序座舍。所有的計(jì)算機(jī)系統(tǒng)都實(shí)現(xiàn)了各種排序算法以供系統(tǒng)和用戶使用沮翔。

即使你只是使用標(biāo)準(zhǔn)庫中的排序函數(shù),學(xué)習(xí)排序算法仍然有三大實(shí)際意義:

1.對排序算法的分析將有助于你全面理解本書中比較算法性能的方法曲秉;

2.類似的技術(shù)也能有效解決其他類型的問題采蚀;

3.排序算法常常是我們解決其他問題的第一步。

更重要的是這些算法都很經(jīng)典承二、優(yōu)雅和高效榆鼠。排序在商業(yè)數(shù)據(jù)處理和現(xiàn)代科學(xué)計(jì)算中有著重要的地位,它能夠應(yīng)用于事物處理矢洲、組合優(yōu)化璧眠、天體物理學(xué)、分子動力學(xué)读虏、語言學(xué)责静、基因組學(xué)、天氣預(yù)報和很多其他領(lǐng)域盖桥。其中一種排序算法(快速排序)甚至被譽(yù)為20世紀(jì)科學(xué)和工程領(lǐng)域的十大算法之一灾螃。

我們將學(xué)習(xí)幾種經(jīng)典的排序算法,并高效地實(shí)現(xiàn)了“優(yōu)先隊(duì)列”這種基礎(chǔ)數(shù)據(jù)類型揩徊。

我們將討論比較排序算法的理論基礎(chǔ)并在本章結(jié)尾總結(jié)若干排序算法和優(yōu)先隊(duì)列的應(yīng)用腰鬼。

作為對排序算法領(lǐng)域的第一次探索,我們將學(xué)習(xí)兩種初級的排序算法以及其中一種的一個變體塑荒。深入學(xué)習(xí)這些相對簡單的算法的原因在于:第一熄赡,我們將通過它們熟悉一些術(shù)語和簡單的技巧;第二齿税,這些簡單的算法在某些情況下比我們之后將會討論的復(fù)雜算法更有效彼硫;第三,以后你會發(fā)現(xiàn)凌箕,它們有助于我們改進(jìn)復(fù)雜算法的效率拧篮。

我們關(guān)注的主要對象是重新排列數(shù)組元素的算法,其中每個元素都有一個主鍵牵舱。排序算法的目標(biāo)就是將所有元素的主鍵按照某種方式排列(通常是按照大小或是字母順序)串绩。排序后索引較大的主鍵大于等于索引較小的主鍵。元素和主鍵的具體性質(zhì)在不同的應(yīng)用中千差萬別芜壁。在Java中礁凡,元素通常都是對象高氮,對主鍵的抽象描述則是通過一種內(nèi)置的機(jī)制(請見2.1.1.4節(jié)中的Comparable接口)來完成的“崖ǎ“排序算法類模版”中的Example類展示了我們的習(xí)慣約定:我們會將排序代碼放在類的sort()方法中纫溃,該類還將包含輔助函數(shù)less()和exch()(可能還有其他輔助函數(shù))以及一個示例用例main()腰涧。Example類還包含了一些早期調(diào)試使用的代碼:測試用例main()將標(biāo)準(zhǔn)輸入得到的字符串排序韧掩,并用私有方法show()打印字符數(shù)組的內(nèi)容。我們還會在本章中遇到各種用于比較不同算法并研究它們的性能的測試用例窖铡。為了區(qū)別不同的排序算法疗锐,我們?yōu)橄鄳?yīng)的類取了不同的名字,用例可以根據(jù)名字調(diào)用不同的實(shí)現(xiàn)费彼,例如Insertion.sort()滑臊、Merge.sort()、Quick.sort()等箍铲。

大多數(shù)情況下雇卷,我們的排序代碼只會通過兩個方法操作數(shù)據(jù):less()方法對元素進(jìn)行比較,

exch()方法將元素交換位置颠猴。exch()方法的實(shí)現(xiàn)很簡單关划,通過Comparable接口實(shí)現(xiàn)less()方

法也不困難。將數(shù)據(jù)操作限制在這兩個方法中使得代碼的可讀性和可移植性更好翘瓮,更容易驗(yàn)證代碼的正確性贮折、分析性能以及排序算法之間的比較。在學(xué)習(xí)具體的排序算法實(shí)現(xiàn)之前资盅,我們先討論幾個對于所有排序算法都很重要的問題调榄。



這個類展示的是數(shù)組排序?qū)崿F(xiàn)的框架。對于我們學(xué)習(xí)的每種排序算法呵扛,我們都會為這樣一個類實(shí)現(xiàn)一個sort()方法并將Example改為算法的名稱每庆。測試用例會將標(biāo)準(zhǔn)輸入得到的字符串排序,但是這段代碼使我們的排序方法適用于任意實(shí)現(xiàn)了Comparable接口的數(shù)據(jù)類型今穿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缤灵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荣赶,更是在濱河造成了極大的恐慌凤价,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔创,死亡現(xiàn)場離奇詭異利诺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剩燥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門慢逾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立倍,“玉大人,你說我怎么就攤上這事侣滩】谧ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵君珠,是天一觀的道長寝志。 經(jīng)常有香客問我,道長策添,這世上最難降的妖魔是什么材部? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮唯竹,結(jié)果婚禮上乐导,老公的妹妹穿的比我還像新娘。我一直安慰自己浸颓,他們只是感情好物臂,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产上,像睡著了一般棵磷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒂秘,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天泽本,我揣著相機(jī)與錄音,去河邊找鬼姻僧。 笑死规丽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撇贺。 我是一名探鬼主播赌莺,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼松嘶!你這毒婦竟也來了艘狭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤翠订,失蹤者是張志新(化名)和其女友劉穎巢音,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尽超,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡官撼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了似谁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傲绣。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡掠哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秃诵,到底是詐尸還是另有隱情续搀,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布菠净,位于F島的核電站禁舷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗤练。R本人自食惡果不足惜榛了,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煞抬。 院中可真熱鬧,春花似錦构哺、人聲如沸革答。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽残拐。三九已至,卻和暖如春碟嘴,著一層夾襖步出監(jiān)牢的瞬間溪食,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工娜扇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留错沃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓雀瓢,卻偏偏與公主長得像枢析,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刃麸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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