排序演算法總結 交換排序之起泡排序

2021-06-27 12:18:26 字數 1553 閱讀 6091

交換排序的主要思想是:在待排序序列中選擇兩個記錄,將他們的關鍵碼進行比較,如果反序則交換他們的位置。

起泡排序的思想是:

兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序的記錄為止。

起泡排序的問題是:

1.在一趟起泡排序中,若有多個記錄位於最終的位置,應如何記載?

2.如何確定起泡排序的範圍,使得已經位於最終位置的記錄不參與下一趟排序?

3.如何判別起泡排序的結束。

排序的過程:

1.將整個待排序的記錄序列劃分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄;

2.對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,如果反序則交換,從而使得關鍵碼小的記錄向前移動,關鍵碼大的記錄向後移動(像水中的氣泡,體積大的先浮上來)

3.重複執行2,直到無序區中沒有反序的記錄。

問題1的解決:

如果在某趟氣泡排序中位於最終位置的關鍵碼的個數大於1,那麼在下一趟氣泡排序中這些關鍵碼應該避免重複比較,為此,設定exchange記載每次記錄交換的位置,則一趟排序後,exchange記載的一定是這趟排序中記錄的最後一次交換的位置,從此位置之後的所有記錄均有序了。

for(r[j]>r[j+1])

問題2的解決:

設bound位置的記錄是無序區的最後乙個記錄,則每趟氣泡排序的範圍是:r[1]~r[bound]

for(j=1;jr[j+1])

}

在一趟排序後,exchange位置之後的記錄一定是有序的,所以下一趟氣泡排序中的無序區的最後乙個記錄的位置是:exchange 

bound=exchange
問題3的解決:

判斷氣泡排序的結束條件是在一趟排序過程中沒有進行交換記錄的操作。為此,在每趟氣泡排序開始之前,設exchange的初值為0,在該趟排序的過程中,只要有記錄的交換,exchange的值就會大於0,這樣,在一趟比較完畢,就可以通過exchange的值是否為0來判斷是否還有記錄的交換,從而判斷排序是否結束。

演算法如下:

while(exchange!=0)

}}

整個演算法和測試**如下:

#include #include using namespace std;

void swap(int *number1, int *number2)

void bubblesort(int *array, int len)

} }}void show(int *array, int len)

cout << endl;

}void main()

; int len = sizeof(array) / sizeof(array[0]);

bubblesort(array, len);

show(array, len);

system("pause");

}

排序演算法 交換排序之快速排序

和歸併排序一樣,快速排序也是一種分治的遞迴演算法。快速排序的思想是 選取乙個樞紐元,將比樞紐元小的元素放樞紐元前面,把比樞紐元小的元素放後面,然後將前面的集合,後面的集合,重複之前的步驟。樞紐元的選取是一門學問,我們要將樞紐元的盡量選取為集合中間值,使得樞紐元兩邊的元素量能更加均勻,避免大小不等的遞...

排序演算法總結 3 交換排序

上兩篇文章,排序演算法總結 1 插入排序 排序演算法總結 2 選擇排序 排序主要分為插入排序 選擇排序 交換排序 歸併排序 計數 也有叫分配 排序。現在總結一下交換排序 下面開始第三部分 交換排序 三 交換排序 交換排序的基本思想是兩兩比較待排序物件的關鍵碼,如果發生逆序 即排列順序與期望的相反 就...

排序演算法 交換排序

交換排序的基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時則進行交換,直到沒有反序的元素為止。1.氣泡排序 交換排序 演算法 氣泡排序 bubble sort 輸入 待排序元素的陣列,待排序元素個數 輸出 原理 通過無序區中相鄰元素間關鍵字的比較和位置的交換,使關鍵字最小的元素如氣泡一...