各種排序演算法的總結

2021-07-04 17:50:38 字數 2210 閱讀 3666

穩定的排序:

1、氣泡排序:

工作原理:依次相鄰元素進行比較,將小數放在前面,大數放在後面,每一次掃瞄是將最大的數放在最右邊,每次掃瞄完之後,下次掃瞄的個數減一,知道所有的數都放好位置。即第一次掃瞄:比較第乙個數和第二個數,判斷大小,小數在前,大數在後,接著比較第二個數和第三個數,依次比較,知道最後乙個數。此時最大的數在最後乙個位置上了。第二次掃瞄:比較從第乙個數和第二個數,判斷大小,小數在前,大數在後,直到到倒數第二個數為止。同樣的方法掃瞄n次。本質是每掃瞄一次就拍好了乙個最大值的位置,故叫做氣泡排序。

2、插入排序:

工作原理:通過構建將整個待排序的序列分成有序序列和無序序列,從無序序列當中選擇乙個元素插入待有序序列中。這裡需要注意的是,最初將整個序列的第乙個數作為有序序列,後面n-1個數作為無序序列。從無序序列選擇第乙個數開始插入有序序列中,插入的方式是從右向左開始掃瞄有序序列,最右邊的數是有序序列中最大的數,依次比較,待排序的數比已排好的數小,則將已排好的數往後移,最後找出待插入的數合適的位置插入。

3、歸併排序:

工作原理:首先申請乙個大小為兩個待排序序列之和的空間,用來存放合併之後的序列。合併的方法是:分別設定兩個指標,指標分別指向兩個待排序的兩個序列的第乙個數。依次比較兩個指標所指向的值的大小,將小的數放入申請的空間當中,以此類推。直到其中有乙個指標到達序列的末尾。將剩下的另個序列的元素複製到申請的空間當中。

4、桶排序:

工作原理:給定一組數,將它們分成n等份範圍的桶。即假設有100個數,則將它們分成10個區間大小相同的桶。然後分別對每個桶放入相應大小的元素,並進行桶內排序。最後按照桶順序輸出每個桶中的元素。其中桶內排序可以選擇冒泡、插入、快拍都可以。

5、基數排序

工作原理:將一組待排序的數,找出最大值,根據最大值的位數,從低位到高位一次根據每位上的數分別放入0~9(十進位制,若是二進位制就是0~1)個桶當中,每次的按位排序之後的結果作為下乙個高位排序的輸入。即每一次排序可以通過遞迴來實現。

不穩定的排序:

1、選擇排序:

工作原理:首先將待排序的序列的第乙個元素看作是已排好的數,通過將它跟後面的每乙個數進行比較,判斷大小,如果發現比它還小,則進行交換。每次掃瞄完之後,將最小的數放在最前面了。以此類推。直到所有的元素都放入正確的位置。

此排序演算法不穩定的原因是因為它存在隔數交換,也就是交換操作不是相鄰元素交換而導致的不穩定。舉個例子:假如待排序的元素:,第一次選擇最小值後變成,對應的兩個2的位置發生了變化。

2、希爾排序:

工作原理:希爾排序是插入排序的一種,是針對直接插入排序演算法的改進。該方法又稱縮小增量排序。

按照不同的增量序列,對待排序的陣列進行按照不同的增量方式來直接插入排序。直到增量值為1時就退化為直接插入排序了。

本排序演算法由於增量的改變,在插入時,存在非相鄰元素的交換。因此是不穩定的。

3、快速排序:

工作原理:快排是對氣泡排序的一種改進。其工作原理:1)首先選擇乙個數作為基準,選擇基準方式的不同可以對快排進行改進,當選擇了基準之後,將基準和待排序序列的第乙個元素進行交換,此時基準的位置是在第乙個元素的位置上,為了方便後面的操作。2)從待排序的序列從右往左掃瞄,找出比基準小的數,將它與基準元素交換,也就是將後面大於基準的數放到最前面來,此時基準被交換到後面來了;3)然後從左向右掃瞄,找出比基準大的數,同樣的跟基準交換,將大於基準元素放到後面來。重複這個過程,直到所有大於基準的元素放到基準的右邊,小於基準元素放在基準的左邊。最後將基準放在正確的順序的位置上。每次過程完之後,都表明基準排序好了。然後基準左邊的序列遞迴呼叫該過程,基準右邊的序列遞迴呼叫該過程。直到所有元素都放入正確的位置。

此演算法同樣存在非相鄰元素之間的交換,因此本演算法是不穩定的。

4、堆排序:

堆排序是利用最大堆(最小堆)記錄最大關鍵字這一特性。具體步驟如下:

1)首先初始化構建最大堆或者最小堆。所謂最大堆或者最小堆的結構就是該完全二叉樹中,根節點是所有節點中最大值或者最小值。

2)將堆頂元素(二叉樹的根節點)與待排序序列最後乙個元素交換,此時得到新的無序區1~n-1個元素,和有序區1個元素n。

3)由於交換之後,無序區的序列可能違反了堆的性質(即堆頂元素是最大值或最小值)。因此需要對它進行調整(即通過比較所有的元素,將最大的元素放在堆頂,也就是序列的第乙個元素的位置上)。調整之後將堆頂與最後乙個元素n-1交換,得到新的無序區1~n-2個元素。和有序區2個元素n-1和n,不斷地重複該過程,直到有序區的元素有n-1個,則整個排序過程完成。

堆排序也是一種選擇排序,是一種樹形選擇排序。由於每次交換也是菲林元素的交換,存在相同元素的位置發生變化。因此該演算法也是不穩定的。

各種排序演算法的總結

都是基於記憶體的排序演算法,包括插入排序 希爾排序 氣泡排序 快速排序 簡單選擇排序 堆排序 歸併排序 14年在網易blog上寫的,現把它放到這裡。一,直接插入排序 總體思路 位於表中後面的元素依次與表中前面的元素比較,若比之小,則還需繼續和更前面的元素比較,直至遇到乙個比它大的元素或者比較到第乙個...

各種排序演算法總結

注 以下所講排序,以公升序排序為例!選擇排序 作者思路 在一組數中,選擇第乙個數標記為最小值,在剩下的數中找比它小的數,若找到則交換兩數,標記新的 最小值 然後繼續往下找,這樣一趟下來就可以找到一組數中第二小的值,第二次以第二個數作為最小值,如此迴圈下去。這是最簡單 最基礎的一種排序演算法。例子 1...

各種排序演算法總結

1 插入排序 void insertsort int a,int n a j 1 key 插入排序是穩定的排序,平均和最壞時間複雜度是o n 2 最好的時間複雜度是o n 對應於全部排好序的情況。2 氣泡排序 void bubblesort int a,intn 氣泡排序是穩定的排序,平均和最壞時間...