七大排序演算法之各演算法的比較

2021-08-19 14:29:28 字數 1074 閱讀 7938

如果對七大排序演算法還不是很了解的,可以對著下面這些鏈結,再去學習或者熟悉下

氣泡排序

選擇排序

插入排序

快速排序

堆排序歸併排序

希爾排序

這篇文章主要是對這七大排序演算法做一些總結,什麼情況下應該用哪個排序演算法等。

首先,再複習一下各個排序演算法的時間複雜度,以及穩定性(圖源自網路)

先科普一下演算法的穩定性這個概念,什麼叫做演算法的穩定性呢?舉個具體的例子

首先簡單的數字排序,這裡穩定性沒有任何意義,那麼情況下有意義呢?要排序的內容是乙個複雜物件的多個數字屬性,且其原本的初始順序存在意義,那麼我們需要在二次排序的基礎上保持原有排序的意義,才需要使用到穩定性的演算法,例如要排序的內容是一組原本按照**高低排序的物件,如今需要按照銷量高低排序,使用穩定性演算法,可以使得想同銷量的物件依舊保持著**高低的排序展現,只有銷量不同的才會重新排序。(當然,如果需求不需要保持初始的排序意義,那麼使用穩定性演算法依舊將毫無意義)。

好了,接著總結,其實網上關於各大演算法的分析已經有很多了,但是可能有一些問題就是,說了一大堆,不能快速get到點,那麼這就是這篇文章的目的,沒有廢話,乾貨在此。

(1)當原表基本有序時,氣泡排序和插入排序的表現良好,時間複雜度可降至o(n)

(2)當待排序元素個數n較大時,應該選擇快速排序,堆排序,或者歸併排序等時間複雜度為o(nlogn)的演算法

2.1  若記憶體空間允許,且要求穩定性,則選擇歸併排序,但是一般不會直接使用歸併排序,通常和插入排序結合起來使用,先用插入排序得到有序序列,再歸併之,並且由於插入排序是穩定的,所以改進之後的歸併排序仍然是穩定的

2.2  堆排序所需輔助空間少於快速排序,並且不會出現時間複雜度退化為o(n*n)的情況,也就是說,最壞情況下的時間複雜度都為o(nlogn)

2.3   對效率要求較高的話,採用快速排序,且快速排序是大規資料排序場景中應用最多的排序演算法

(3)當待排序元素個數n較小時,採用插入排序和選擇排序,若同時要求穩定性,採用插入排序

(4)一般不採用傳統的氣泡排序

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...

七大排序演算法

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...