排序演算法 交換排序(2種)

2021-08-11 01:34:34 字數 1839 閱讀 7525

1.氣泡排序

【思想】不停地比較相鄰的記錄,如果不滿足排序要求就交換相鄰資料,直到所有的記錄都已經排好序

【特點】穩定

空間代價:o(1)

時間代價:o(n^2)

-比較次數        -交換次數 

·最少:o(n)      ·最少:0

·最多:o(n^2)     ·最多:o(n^2)

1

void 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所指的位置

1

int 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所指的位置

1

int 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指...