排序,多麼熟悉的詞。在沒有真正接觸到它時,已經聽聞了它的強大和重要性。如今,那乙個個耳熟能詳的排序演算法,也漸漸的在自己面前揭開了它們的神秘面紗。那麼多的排序演算法,想一一總結一番。可是,在每個總結之前,有個巨集觀整體上的認識,感覺效果會更好些。所以,我們先從排序講起。
排序(sorting)是資料處理中一種重要而且常用的運算。它就是將一組物件按照規定的次序重新排列的過程,往往是為檢索服務的。
下面我將從以上四個方面,巨集觀認識一下排序演算法。
首先,排序可分為兩大類:
(1)內部排序(internal sorting):待排序的記錄全部存放在計算機記憶體中進行的排序過程。
(2)外部排序(external sorting):待排序的記錄數量很大,記憶體不能儲存全部記錄,需要對外存進行訪問的排序過程。
後面討論的演算法都是指的內部排序。
對於內部排序的方法,有很多種,主要總結的為排序、交換排序、選擇排序和歸併排序四類。
相同鍵值的兩個記錄在排序前後相對位置的變化情況是排序演算法研究中經常關注的乙個問題,這個問題稱為排序演算法的穩定性。
判斷一種排序演算法是否穩定,只需要看經過排序後,序列內相同鍵值的位置是否發生變化,如果沒有變化,則是穩定的;如果位置發生了變化,則是不穩定的。
比如,值得注意的是,穩定性是排序方法本身的特定,與資料無關,換句話說,一種排序方法如果是穩定的,則對所有的資料序列都是穩定的,反過來,如果一組資料上出現不穩定的現象,則該方法是不穩定的。
下面是各種排序方法的穩定性比較:
評價乙個排序演算法的優劣,通常可用時間複雜度和空間複雜度兩個指標。我們主要討論時間複雜度。在排序過程中主要有比較兩個鍵值大小和將記錄從乙個位置移動到另乙個位置這兩種基本操作。因此,從鍵值的比較次數和記錄的移動次數兩個方面來分析時間複雜度。
下面是各種排序演算法的時間複雜度:
到此為止,對排序演算法的巨集觀認識也就結束了。主要是從排序的分類、方法、穩定性和時間複雜度四個方面剖析,並沒有涉及到某一種排序方法的具體演算法,這將是後面需要乙個乙個總結的工作。
不管是軟考還是自考,都需要學習和掌握排序演算法。而此篇巨集觀性的部落格,也主要是從自考的學習中著手,感覺思路更清楚,理解更容易。
面對乙個個路口
當下做ee 的開發也已 2年有餘了,感覺技術的提公升經驗的積累沒有到自己預料中的樣子,是自身的原因還是環境呢。感覺自己不是那種能創業的人,3 分鐘熱情的,幹啥都不夠專注堅持,唯一剩下的就剩給人打工了。打工也分很多種啊,很快就要步入那個上有老,下有小的年齡段了,打工打的不好也會很慘啊!看到做移動開發的...
網路就好似乙個個樹洞
以前的人是這樣處理秘密的 他們走到森林的深處,找到一棵樹,在樹下挖了乙個洞,對著樹洞把自己心裡的秘密說出來,然後再用泥土把洞掩埋。這樣,秘密就會永遠被埋在樹洞裡。看 2046 時,這樣一句話被重複了幾遍,造成我雖然看不懂 2046 但仍然記得這句話,在心裡重複地想起這句話,想著想著就想出另外乙個結局...
js讓文字乙個個出現
直接上 談及航母的改建工程,當時為了解決現場建設困難,他們做了大量的工作 一是統籌好所有的工作專案,精確安排每人每天的任務,最忙的時候精確到每個小時的具體任務 二是提高所有的施工質量,通過保證質量,在更大程度上節約時間 三是加班加點。通過這三個方面的手段,才把時間給搶回來。王治國回憶,因為我們在北方...