第八章學習小結
本章節學習了各種的排序方法,它們的效能比較如下:
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個元素進行若干趟的“分配”與“收集”來實現排序。