排序演算法 交換排序

2021-07-25 14:15:29 字數 2014 閱讀 9906

交換排序的基本思想:兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時則進行交換,直到沒有反序的元素為止。

1. 氣泡排序

/**

* 交換排序

* * 演算法:氣泡排序(bubble sort)

* 輸入:待排序元素的陣列,待排序元素個數

* 輸出:

* 原理:通過無序區中相鄰元素間關鍵字的比較和位置的交換,使關鍵字最小的元素如氣泡一般逐漸往上「漂浮」直至「水面」。

整個演算法是從最小面的元素開始,對每個相鄰的關鍵字進行比較,且使關鍵字較小的元素換至關鍵字較大的元素之上,經過一趟氣泡排序後,關鍵字最小的元素到達最上端。

接著,再在剩下的元素中找關鍵字次小的元素,並把它換到第二個位置上。以此類推,直至遍歷所有元素。

* 過程:

* 1)從最後乙個元素r[n-1]開始,兩兩相鄰元素比較,直至r[0]

* 2)在比較的過程中,如果r[j].keyi; j--)

if (r[j].key < r[j - 1].key)

}}

2. 改進的氣泡排序

/**

* 交換排序

* * 演算法:改進的氣泡排序(improved bubble sort)

* 輸入:待排序元素的陣列,待排序元素個數

* 輸出:

* 原理:與氣泡排序類似,但是如果在某一趟比較時沒有出現任何元素交換,則說明已排好序,無需繼續遍歷

* 過程:

* 1)從最後乙個元素r[n-1]開始,兩兩相鄰元素比較,直至r[0]

* 2)在比較的過程中,如果r[j].keyi; j--)

if (r[j].key < r[j - 1].key)

//本趟沒有發生變換,則結束演算法

if (!exchange)

}}

3. 快速排序

/**

* 交換排序

* * 演算法:快速排序(quick sort)

* 輸入:待排序元素的陣列,起始元素,終止元素

* 輸出:

* 原理:在待排序的n個元素中任取乙個元素(通常取第乙個元素)作為基準,把該元素放入適當位置後,資料序列被此元素劃分為兩部分,所有關鍵字比該元素小的元素放在左半部分,所有關鍵字比該元素大的元素放在右半部分;

之後對所有劃分出來的兩部分分別重複上述過程,直至每部分內只有乙個元素或為空。

* 過程:

* 1)起始元素為0,終止元素為n-1,表明對r[0..n-1]進行排序

* 2)...

* 3) 假設此時起始元素為s,終止元素為t,基準元素為r[s]

* 4)將基準元素移至變數temp,設兩個指標i和j,它們初始時分別指向s和t

* 5)令j自t向左遍歷,直至r[j].keytemp.key,將r[i]移至j所指的位置上

* 7)重複上述操作,直至i=j,此時所有r[s..i-1]的關鍵字都小於temp.key,所有r[i+1..t]的關鍵字都大於temp.key

* 8)將temp移至i所指的位置r[i],它把無序區中的元素分割為r[s..i-1]和r[i+1..t]

* 9) 對r[s..i-1]和r[i+1..t]重複上述操作,直至分割的區間中只有乙個元素或為空

* 10) ...

* 11) 最終得到的r[0..n-1]中的元素遞增排序

* * 時間複雜度為o(nlog2(n)),空間複雜度為o(log2(n)),不穩定的排序方法

*/void quicksort(rectype r, int s, int t)

r[i] = tmp;

//對左半區間遞迴

quicksort(r, s, i - 1);

//對右半區間遞迴

quicksort(r, i + 1, t);

}}

排序演算法 交換排序

基本思想 在乙個待排序序列中,兩兩比較元素的排序碼,如果不滿足次序要求則進行交換,直到整個排序序列滿足要求。思想 對待排序序列從前向後,依次比較相鄰元素的排序碼,若發生逆序,則進行交換。實現 include void bubblesort int p,int n if flag 減少不必要的比較 r...

交換排序演算法

快速排序 為啥叫快速排序,因為速度快,效率高 1.先找乙個數作為基準。作為基準的這個數,一趟排下來,左邊的數必小於它,右邊的數必大於它,也就是說,它找到了自己的位置。2.將兩個指標i,j分別指向表的起始 基準 和最後的位置。3.比較j指標的數字是否小於基準,j 直到j小於基準,交換位置 4.比較i指...

交換排序演算法

就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置。將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部移動。氣泡排序 快速排序 說明 1.以下方法最後結果均按照公升序排列 2.用4,2,1,3,7,4,5,8,3,5序列進行測試 1 基本思想 在n個待排序陣列中選取待排序數...