排序算法歸類總結

基本排序算法:算法

一、冒泡排序:此爲基礎中的基礎,從頭開始遍歷,將路上的最大或最小元素「轉移」至最左側或者最右側,冒泡之名就是這麼來的 —— 一個一個的冒頭。數組

二、插入排序:分爲直接插入排序、折半插入排序以及希爾排序,希爾排序在後面會講到,此處略過。排序

插入排序的思想很簡單,就像玩撲克牌,手中一開始沒有牌,從發給本身的牌堆中一張一張的拿出來而後放到手中,直接放到最終的位置。基礎

三、選擇排序進階

直接選擇排序:在待排數組中直接查找到最小的,而後與第一個元素交換位置,後面再從第2~n個元素中查找最小的與第2個元素交換位置,以此類推完成排序。遍歷

進階排序算法:方法

歸併排序:將待排數組分爲多個互不相交的較小子數組,分別對其進行排序而後再進行合併數據

  合併方法:兩個子數組各取一個元素a、b,將較小的(設a<b)放到目標區域,而後再從a所在的小數組拿一個,再次與b比較,最後若是有一堆有剩下的,直接放在後面便可。時間

快速排序:與歸併排序類似,也是分爲多個互不相交的較小子數組,分別對其進行排序而後再進行合併,不一樣之處在於歸併排序的分解是隨便的,而快速排序的分解則是有跡可循的,待排數組所分解獲得的兩個子數組,確定某個子數組的全部元素均小於另外一個子數組的全部元素。

希爾排序:分爲三步,①將待排序列分組;②對每組數據進行直接插入排序;③對整個序列進行直接插入排序。(分組方法:給定一個步長d,下標相差d的元素分到一個組,每次子序列排好序後縮小d)

線性時間排序算法:

計數排序:對於已知元素取值範圍的序列,可記錄小於等於某個元素的元素個數,這樣遍歷一遍便可獲得每一個元素的最終位置,達到線性時間的算法時間複雜度。

桶排序:運用了區間的思想,將全部元素所在的大區間分爲多個不一樣的小區間,分別對各個區間的元素進行排序,而後進行合併。

基數排序:對序列中元素的各個位進行排序,排序方法分爲MSD(最高位優先方法,從左向右,即高位到低位)和LSD(最低位優先方法,從右向左,即低位到高位)。

相關文章
相關標籤/搜索