1.氣泡排序
【思想】不停地比較相鄰的記錄,如果不滿足排序要求就交換相鄰資料,直到所有的記錄都已經排好序
【特點】穩定
空間代價:o(1)
時間代價:o(n^2)
-比較次數 -交換次數
·最少:o(n) ·最少:0
·最多:o(n^2) ·最多:o(n^2)
1void bubblesort(int array, intn)2
14if (noswap) return; //
沒發生交換,則排好序15}
16 }
2.快速排序
【思想】基於分治法的排序
·選擇軸值(pivot)
·將序列劃分為兩個子串行l和r,使得l中的所有記錄都小於或等於軸值,r中的記錄都大於軸值
·對子序列l和r遞迴進行快速排序
【特點】不穩定
空間代價:o(logn)
時間代價:o(nlogn)
分治策略的基本思想:
-分 -- 劃分子問題
-治 -- 求解子問題(子問題不重疊)
-合 -- 綜合解
軸值選擇:
·盡可能使l,r長度相等
·選擇策略:
-選擇最左邊記錄(第乙個記錄)
-隨機選擇
-選擇平均值
分割過程(整個快速排序的關鍵):
·分割演算法1
(1)備份軸值(首記錄)
(2)取兩個指標low和high,初始值就設為第二個元素和最後乙個元素的下標,low <= high
(3)移動兩個指標
·從high所指位置向左搜尋,找到第乙個比軸值小的元素
·從low所指位置向右搜尋,找到第乙個比軸值大的元素
(4)交換low和high兩位置的值
(5)重複(3)、(4)兩步驟的過程,直到low > high
(6)把軸放在high所指的位置
1int partition1(int array, int first, int
last)212
swap(array[first],array[high]);
13return
high;14}
15void qsort(int array, int first, int
last)
1623 }
·分割演算法2
(1)備份軸值(首記錄)
(2)取兩個指標low和high,初始值就是序列兩端的下標,保證low <= high
(3)移動兩個指標
·從high所指位置向左搜尋,找到第乙個比軸值小的元素,將其放在low的位置
·從low所指位置向右搜尋,找到第乙個比軸值大的元素,將其放在high的位置
(4)交換low和high兩位置的值
(5)重複(3)、(4)兩步驟的過程,直到low = high
(6)把軸放在low所指的位置
1int partition2(int array, int first, int
last)
212 array[low] =pivot;
13return
low;14}
15void qsort(int array, int first, int
last)
1623 }
排序演算法 交換排序
交換排序的基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時則進行交換,直到沒有反序的元素為止。1.氣泡排序 交換排序 演算法 氣泡排序 bubble sort 輸入 待排序元素的陣列,待排序元素個數 輸出 原理 通過無序區中相鄰元素間關鍵字的比較和位置的交換,使關鍵字最小的元素如氣泡一...
排序演算法 交換排序
基本思想 在乙個待排序序列中,兩兩比較元素的排序碼,如果不滿足次序要求則進行交換,直到整個排序序列滿足要求。思想 對待排序序列從前向後,依次比較相鄰元素的排序碼,若發生逆序,則進行交換。實現 include void bubblesort int p,int n if flag 減少不必要的比較 r...
交換排序演算法
快速排序 為啥叫快速排序,因為速度快,效率高 1.先找乙個數作為基準。作為基準的這個數,一趟排下來,左邊的數必小於它,右邊的數必大於它,也就是說,它找到了自己的位置。2.將兩個指標i,j分別指向表的起始 基準 和最後的位置。3.比較j指標的數字是否小於基準,j 直到j小於基準,交換位置 4.比較i指...