八大排序演算法

2021-09-25 12:38:59 字數 3024 閱讀 3782

思想:

將陣列中的所有元素依次與前面已經排好的元素從後向前進行比較,如果當前元素比已排序的元素小,就交換,直到所有元素都比較過

案例:

**分析

兩層迴圈

第一層:遍歷待比較的所有陣列元素

第二層:將本輪的當前元素與已經排好的元素相比較,當前元素》已排好的,兩者交換

**實現

思想:

1.將待排序陣列按步長gap進行分組(陣列長度為n,第一次gap為n/2),將每組元素利用直接插入的方法排序;

2.每次gap折半,迴圈上述操作;

3.當gap等於1時,利用直接插入,完成排序。

案例:

**分析:

三層迴圈

第一層:將gap依次折半,對序列進行分支,直到gap=1

第二、三層:直接插入排序所需要的兩次迴圈

**實現:

思想:

比較+交換

1.從待排序序列中,找到關鍵字最小的元素;

2.如果最小元素不是待排序序列的第乙個元素,則將其和第乙個元素交換;

3.從餘下的n-1個元素中找出關鍵字最小的元素,重複第2步,直到排序結束。

案例:

**分析:

兩層迴圈

第一層:依次遍歷序列當中的每乙個元素

第二層:將遍歷得到的當前元素與餘下的元素進行比較,如果符合最小元素的條件,就交換。

**實現:

堆概念:本質是一種陣列物件。任一父節點大於(或小於)其左右孩子,分為大頂堆和小頂堆。

思想:

1.將序列寫成完美二叉樹的形式,再將其構建成大頂堆;(此時位於根節點的元素就是當前序列的最大值)

2.取出當前大頂堆的根節點,將其與序列末尾元素進行交換;(此時序列末尾元素為最大值)

3.對交換後的n-1個序列元素進行調整,使其滿足大頂堆的性值;

4.重複2、3步,直至堆中只有乙個元素為止。

案例:

**分析:

**實現:

思想:

1.將序列當中的左右元素依次比較,讓右邊的元素始終大於左邊的元素(第一輪結束,序列的最後乙個元素為當前序列的最大值);

2.對序列剩下的n-1個元素再次執行步驟1;

3.長度為n的序列,一共需執行n-1輪比較

案例:

**實現:

思想:

挖坑填數+分治

1.選擇序列中的第乙個數為基準數;

2.將序列中的所有元素遍歷,比基準數小的位於其左側,大的位於其右側;

3.重複前兩步,至所有子集中只有乙個元素為止。

**分析:(偽**描述如下)

1.i = low; j = high;基準數挖出形成第乙個坑 a[ i ]。

2.j - - 由後向前找比它小的數,找出後 j 停止移動,挖出此數填到前乙個坑a [ i ]中。

3.i + + 由前向後找比它大的數,找到後也挖出此數填到前乙個坑 a [ j ]中。

4.重複執行2、3步,直到 i = = j,將基準數填到a [ i ]中。

案例:

**實現:

思想:

1.分解,將乙個無序的序列採用遞迴一直一分為二,直到分組後組內只有乙個元素,此時組內所有元素有序,分組結束;

2.合併,將劃分後的序列段兩兩排序合併。

案例:

思想:

分配+收集

1.先分配序號為0—9的十個桶;

2.將待排序序列的中的元素取出,根據個位上的數字分配到與它序號相同的桶中,序列中所有元素都分配完後,按順序依次收集桶中元素形成乙個新的待排序列;

3.對新的序列重複執行分配收集元素中的十位,百位…直到分配完該序列中的最高位,排序結束。

案例:

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...

八大排序演算法

一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...

八大排序演算法

排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...