1. 程式人生 > 實用技巧 >第八章學習小結

第八章學習小結

本章節學習了各種的排序方法,它們的效能比較如下:

1.直接插入排序

直接插入排序的核心思想就是:將陣列中的所有元素依次跟前面已經排好的元素相比較,如果選擇的元素比已排序的元素小,則交換,直到全部元素都比較過。

void InsertSort(int R[],int n)
{
    int i,j,temp;
    for(i=1;i<n;i++)    //插入排序共需要插入n個元素,但此處我們預設序列中存在R[0]這個元素,故之後需進行n-1次插入操作
    {
        temp=R[i];
        j=i-1;
        while(j>=0&&temp<R[j])    //
比插入元素大的元素進行後移操作 { R[j+1]=R[j]; --j; } R[j+1]=temp; //插入要插入的元素 } }

2.希爾排序

希爾排序的演算法思想:將待排序陣列按照步長進行分組,然後將每組的元素利用直接插入排序的方法進行排序;每次將gap折半減小,迴圈上述操作;當gap=1時,利用直接插入,完成排序。

3.簡單選擇排序

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

(2)如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換;

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

因此我們可以發現,簡單選擇排序也是通過兩層迴圈實現。
第一層迴圈:依次遍歷序列當中的每一個元素
第二層迴圈:將遍歷得到的當前元素依次與餘下的元素進行比較,符合最小元素的條件,則交換。

4.堆排序

堆:本質是一種陣列物件。特別重要的一點性質:<b>任意的葉子節點小於(或大於)它所有的父節點</b>。對此,又分為大頂堆和小頂堆,大頂堆要求節點的元素都要大於其孩子,

小頂堆要求節點元素都小於其左右孩子,兩者對左右孩子的大小關係不做任何要求。

步驟:(1)首先將序列構建稱為大頂堆;(這樣滿足了大頂堆那條性質:位於根節點的元素一定是當前序列的最大值)

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

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

5.氣泡排序

(1)將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素;

(2)對序列當中剩下的n-1個元素再次執行步驟1。

(3)對於長度為n的序列,一共需要執行n-1輪比較

6.快速排序

演算法思想:快速排序的基本思想:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

7.歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法的一個典型的應用。

演算法思想:將已有的子序列合併,達到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。

8.基數排序

通過序列中各個元素的值,對排序的N個元素進行若干趟的“分配”與“收集”來實現排序。