排序
,就是要整理表中的元素,使之按關鍵字遞增(或遞減)有序排列。
如果待排序的表中,存在有多個關鍵字相同的元素,經過排序後這些具有相同關鍵字的元素之間的相對
次序保持不變,則稱這種
排序演算法是穩定的。
在排序過程中,若整個表都是放在記憶體中處理,排序時不涉及資料的內、外存交換,則稱之為
內排序;
反之,若排序過程中要進行資料的內、外存交換,則稱之為
外排序。
資料結構中主要講到了插入排序,交換排序,選擇排序,歸併排序,基數排序,外排序等幾種排序,
每種排序都有不同的效能,根據情況來選擇合適的排序演算法。
其中插入排序,交換排序,選擇排序,歸併排序是基於比較的排序演算法;
基數排序是不基於比較的排序演算法。
基於比較的排序演算法:
插入排序----直接插入排序演算法:時間複雜度o(n^2),空間複雜度o(1),與待排序資料的順序有關,穩定的
折半插入排序:時間複雜度o(n^2),空間複雜度o(1),與待排序資料的順序有關,穩定的
希爾(shell)排序:時間複雜度
o(n^1.3),空間複雜度o(1),與待排序資料的順序有關,不穩定的
交換排序----氣泡排序演算法:時間複雜度o(n^2),空間複雜度o(1),與待排序資料的順序有關,穩定的
快速排序演算法:時間複雜度
o(nlogn),空間複雜度o(logn),與待排序資料的順序有關,不穩定的
選擇排序----簡單選擇排序演算法:時間複雜度o(n^2),空間複雜度o(1),與待排序資料的順序無關,不穩定的
堆排序:時間複雜度
o(nlogn),空間複雜度o(1),與待排序資料的順序無關,不穩定的
歸併排序----二路歸併排序演算法:時間複雜度
o(nlogn),空間複雜度o(n),與待排序資料的順序無關,穩定的
不基於比較的排序演算法:
基數排序----最低位優先(lsd),最高位優先(msd)
時間複雜度
o(d*(n+r)),空間複雜度o(r),與待排序資料的順序無關,穩定的
d為關鍵字的元組,如關鍵字為456,則d為3;
r為基數,例如對於二進位制數r=2,十進位制數r=10;
n為待排序的關鍵字的個數。
外排序:外排序的基本過程為分兩個步驟:生成若干初始歸併段(順串)和多路歸併。
多路歸併就是將若干個有序檔案歸併成乙個有序檔案。
多路歸併有兩種實現方法:一種是敗者樹,一種是最佳歸併樹(帶權路徑長度最短的k階哈夫曼樹)
各種排序的基本思路沒有在筆記中記錄。
資料結構學習筆記 排序技術
1.互換類排序 氣泡排序,複雜度為o n 2 void bubblesort int a,int n 考慮氣泡的樣子 快速排序,複雜度為o nlogn 思想 從線性表中選取乙個元素,設為t 樞軸 然後對線性表進行分割使得t之前的元素都不大於t,t之後的元素都不小於t,隨後對由t分割的前後兩部分再按上...
資料結構學習筆記 快速排序
今天花了一上午的時間終於明白快速排序的原理了,這裡和大家分享一下。比如有一串數字 52684 37,我們通過快速排序先找出第乙個數字 5 在這一串數字中的位置,然後再對數字 5 兩邊的數字進行同樣的排序方法,最終將整串數字排序完畢。找到第乙個數字 5 的具體步驟如下 從這串數字的兩頭出發,把第乙個數...
資料結構學習筆記 堆排序
堆是一棵完全二叉樹。每個結點的值都大於等於該結點的孩子結點的堆稱為大頂堆,反之則稱為小頂堆。為了使用簡便,我們就用陣列heap來儲存堆結構,heap 1 儲存堆的根結點,如果當前遍歷的結點為heap i 則heap 2i 和heap 2i 1 分別為其左右孩子結點。在了解了堆結構定義之後,我們就可以...