排序算法


直接插入排序

基本思想:

將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然后從第2個記錄逐個進行插入,直至整個序列有序為止。

要點:設立哨兵,作為臨時存儲和判斷數組邊界之用。

前i個排好,每次向后擴展一個



選擇排序

在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然后在剩下的數當中再找最?。ɑ蛘咦畲螅┑呐c第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最后一個數)比較為止。



堆排序

以最大堆為例

以數組建堆

父節點必定比他的子節點小

父節點下標為i,則子節點下標為2i+1和2i+2

step1:建堆,假設長度為length

從最后一個有孩子節點(length-1)/2的節點開始,往下做堆調整操作;之后再-1往前一個節點重復該操作

如上圖a,我們現在num[3]節點進行調整,即97,找出他的子節點較小的一個進行交換,49和97交換,繼續從往下調整,直到數組結束或者該節點小于他的子節點,

重復操作直到建堆完畢。

step2:排序

每次將堆底元素和堆頂元素進行對換,然后對新的對頂元素重新進行滲透堆調整,數組長度-1;重復操作,直到排序完畢,此時數組呈倒序排列

代碼:




冒泡排序

基本思想:

在要排序的一組數中,對當前還未排好序的范圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。




快速排序

用分治思想來解決問題



優化:可以對元素小于等8的可以采取選擇排序

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,215評論 0 52
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,742評論 0 15
  • 四. 走向世界之巔——快速排序 你可能會以為歸并排序是最強的算法了,其實不然?;叵胍幌?,歸并的時間效率雖然高,但空...
    Leesper閱讀 1,752評論 9 7
  • “美味,已經百年沒有見的如此美味的佳肴?!毕呢澙返每粗謶值叵蚝笸说挠駥帯!皠e過來,我會道術?!庇駥幪统龆道锏姆?..
    蒼瀟閱讀 201評論 0 1
  • 木槿是南方最常見的植物之一。從山間水旁、街頭巷尾到公園、庭院,到處都可以見到木槿。 小時候,大人們將木槿花稱之為“...
    對花情味閱讀 1,915評論 1 8