算法快學筆記(十七):史上最全排序算法總結

1. 簡介

本文對常見排序算法進行總結

2. 排序算法

2.1 冒泡排序

該算法比較簡單,幾乎所有語言涉及到算法時,都會涉及到冒泡算法。

算法思路:

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
    持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

2.2 選擇排序

每次選擇一個最大(小)的,直到所有元素都被輸出。

可參考:https://blog.csdn.net/sun7545526/article/details/85165618

2.3 直接插入排序

插入排序的基本方法是:每一步將一個待排序的元素,按其排序碼的大小,插入到前面已經排好序的一組元素的適當位置上去,直到元素全部插入爲止

算法思路:

當插入第i(i >= 1)時,前面的V[0],V[1],……,V[i-1]已經排好序。這時,用V[I]的排序碼與V[i-1],V[i-2],…的排序碼順序進行比較,找到插入位置即將V[i]插入,原來位置上的元素向後順移。

以[21,25,49,25,16,08]爲例,排序過程如下所示:
在這裏插入圖片描述

在小規模數據集或是基本有序時,該算法效率較高。

2.4 希爾排序

先對數據進行預處理,使其基本有序,然後再用直接插入排序算法排序。

詳細過程可參考:https://blog.csdn.net/eric_sunah/article/details/103080731

2.5 快速排序

利用“分而治之”的思想對集合進行排序
可參考:https://blog.csdn.net/sun7545526/article/details/85165742

2.6 堆排序

說堆排序前,先說下啥是堆。

堆:堆是滿足下列性質的完全二叉樹:

  • 每個節點都大於或是等於其左右孩子節點的值,稱爲大頂堆
  • 每個節點都小於或是等於其左右孩子節點的值,稱爲小頂堆

接下來說下堆是如何做排序的,思路如下(以大頂堆爲例):

  1. 根節點是整個堆的最大值,將他移走。
  2. 將剩餘n-1個節點重新構造成一個堆,再將根節點移走
  3. 重複執行1,2。直到沒有節點可移動,就生成了有序序列。

該算法有兩個需要解決問題:

  1. 如何將一個無序序列構建一個堆。
  2. 移除根節點後,如何用剩餘的節點重建堆。

詳細介紹參見:https://blog.csdn.net/eric_sunah/article/details/103081878

2.7 歸併排序

歸併排序(MERGE-SORT)是利用歸併的思想實現的排序方法,該算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞歸求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。

詳細介紹參見:https://blog.csdn.net/eric_sunah/article/details/103082607

3. 總結

分類總結:

在這裏插入圖片描述

時間複雜度總結:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章