氣泡排序法又稱交換排序法, 是由觀察水中氣泡變化構思而成, 氣泡隨著水深壓力而改變. 氣泡在水底時, 水壓最大, 氣泡最小 ; 當慢慢浮上水面時, 發現氣泡由小漸漸變大. 氣泡排序法的比較方式是由第一個元素開始, 比較相鄰元素大小, 若大小順序有誤, 則對調後在進行下一個元素的比較. 如此掃描過一次之後, 就可以確保最後一個元素是位於正確的順序. 接著再逐步進行第二次掃描, 直到完成所有元素的排序為止.
泡沫排序範例 :
以下我們利用 6,4,9,8,3 數列的排序過程來解釋氣泡排序演算流程 :
第一次掃描 : (比較4次)
第二次掃描 : (比較3次)
第三次掃描 : (比較2次)
第四次掃描 : (比較1次)
氣泡法分析 :
範例代碼 :
- #include
- using namespace std;
- struct BenchMark {
- int swapTime;
- int verifyTime;
- };
- BenchMark traditionalBubbleSort(int data[], int n) {
- int cnt = 0, vt=0;
- BenchMark bm;
- for(int i=n-1; i>0; i--) {
- for(int j=0; j
- vt++;
- if(data[j+1] < data[j]) {
- int tmp = data[j+1];
- data[j+1] = data[j];
- data[j] = tmp;
- cnt++;
- }
- }
- }
- bm.swapTime = cnt;
- bm.verifyTime = vt;
- return bm;
- }
- void main(bool b) {
- if(b) {
- int data[6] = {6,5,9,7,2,8};
- cout<< "原始資料: " << endl;
- for(int i=0; i<6; i++) {
- printf("%2d ",data[i]);
- }
- printf("\n");
- BenchMark bm = traditionalBubbleSort(data, 6);
- cout << "傳統泡沫排序: " << endl;
- for(int i=0; i<6; i++) {
- printf("%2d ",data[i]);
- }
- printf("\n");
- printf("Swap time: %d\n", bm.swapTime);
- printf("Verify time: %d\n", bm.verifyTime);
- }
- }
補充說明 :
* [資料結構 小學堂] 排序 : 改良氣泡排序
沒有留言:
張貼留言