演算法系列之 2 排序演算法簡介

2022-03-28 21:10:03 字數 2270 閱讀 4732

簡介:

在演算法的世界裡,排序是最基本又是最重要的一類。在tacp(the art of computing programming)中,佔據了專門且重要的篇幅。在面試中也是屢屢出現。一般而言,排序是查詢的基礎,比如著名的二分查詢,就是建立在有序序列的基礎上的。

在眾多的排序演算法中,可以按照時間複雜度大概分為三類:

n平方階的演算法,

nlgn的演算法(基於比較演算法的下界)

線性時間的演算法。

如果按排序的其他性質來分,又可以分為穩定排序/非穩定排序,等等。

知名的說法有常說的8大排序演算法,專門指內部排序(與在磁碟上的外部排序相比,這些排序全部在記憶體中完成)。包括:

插入排序直接插入排序希爾排序  12

選擇排序簡單選擇排序堆排序  34

交換排序氣泡排序快速排序  56

歸併排序 7

基數排序(是基於桶排序的) 8

1 o(n^2)

1.1 冒泡

基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。每一趟排序後的效果都是講沒有沉下去的元素給沉下去。

演算法流程:

1)比較相鄰的兩個元素,如果前面的資料大於後面的資料,就將兩個資料進行交換;這樣對陣列第0個元素到第n-1個元素進行一次遍歷後,最大的乙個元素就沉到陣列的第n-1個位置;

2)重複第2)操作,直到i=n-1。

時間複雜度分析:o(n^2),氣泡排序是一種不穩定排序演算法。

可以看到,氣泡排序跟選擇排序有相似的地方,在經過一輪迭代以後,都是把最大元素排在最後。

氣泡排序的**簡單易懂,更適合作為教學目的之用。

2 o(nlogn)

歸併(merge)

是二分法的在排序演算法中的一種典型應用。

快排

堆排

3 o(n)的演算法

在clrs一書中,四位作者已經證明了,對於基於比較的排序演算法而言,它的下界就是o(nlgn),也就是說像歸併之類的排序演算法已經是最快了。但是如果打破基於比較去排序的這種思想藩籬,則其實還可以得到更快的排序演算法:時間複雜度為線性的排序演算法。

但是需要注意的是,這些演算法的應用都有一些場景上的限制,即只有滿足特定的條件,才能應用這些演算法。。類似於快排一樣的、通用的線性時間複雜度的排序演算法是不存在的。

這類演算法主要有:

桶排序

計數排序是桶排序的一種特殊情況,可以把計數排序當成每個桶裡只有乙個元素的情況。

桶排序要求資料的分布必須均勻,否則可能導致資料都集中到乙個桶中。比如[104,150,123,132,20000], 這種資料會導致前4個數都集中到同乙個桶中。導致桶排序失效。

網路各博文中流程的桶排序演算法實際上都是計數排序,並非標準的桶排序。

基數

計數排序

它僅適用於資料比較集中的情況。比如 [0~100],[10000~19999] 這樣的資料。

3.1 原理

計數排序、基數排序、桶排序則屬於非比較排序。非比較排序是通過確定每個元素之前,應該有多少個元素來排序。針對陣列arr,計算arr[i]之前有多少個元素,則唯一確定了arr[i]在排序後陣列中的位置。

非比較排序只要確定每個元素之前的已有的元素個數即可,所有一次遍歷即可解決。演算法時間複雜度o(n)

非比較排序時間複雜度底,但由於非比較排序需要占用空間來確定唯一位置。所以對資料規模和資料分布有一定的要求。

參考文獻

資料結構和演算法系列(3)排序演算法

使用場景 o n n n 1 2 如果n比較小的話它的時間複雜度就會降級 資料量比較小,常見於小遊戲中10個左右資料的排序場景 具體實現 氣泡排序演算法 適用於資料量比較小的場景 param array public static void bubblesort int array if flag ...

排序演算法系列之選擇排序 2

選擇排序原理 在長度為nd 陣列中,找到位置不適合的元素,直接放入最終合適的位置上,也就是依次在未排序陣列中找到最小元素,直到最後乙個元素位置 剩下的最後乙個元素n 2最大,無需操作 每輪從無序陣列中找到的最小資料,依次放入到從data 0 到data n 2 中 優點 賦值次數少 缺點 忽略了資料...

演算法(2)排序之氣泡排序

氣泡排序核心思路 每乙個元素 j 和其後面乙個元素 j 1 比較,如果前者 j 大則交換,無論交換與否,讓後面元素 j 1 何其下乙個元素 j 2 接著進行比較 看圖說明,不想寫流程了 設定指標 i,j i 從角標 0 開始,到 n 1 結束,j 每次從 1 開始,到 n i 1 結束 其實 i 表...