一、氣泡排序的演算法思想:
直接講思想可能不好理解,咱們先看看下面這個例子吧。
有10個數字的原順序如下,現要將它從小到大排列,用氣泡排序的思想怎麼做呢?
原序列:1 9 3 0 6 5 8 2 4 7
在氣泡排序的每一趟中,依次比較相鄰的兩個元素,如果順序不對,就交換他們。那麼,
第一趟氣泡排序的結果為:1 3 0 6 5 8 2 4 7 9
第二趟氣泡排序的結果為:1 0 3 5 6 2 4 7 8
9第三趟氣泡排序的結果為:
0 1 3 5 2 4 6 789
.......
第九趟氣泡排序的結果為:
0 1 2 3 4 5 678
9 通過上面的例子,我們總結一下:
(1)要將n個元素冒泡排列為有序,需要排n-1趟;
(2)每一趟氣泡排序都通過兩兩比較 將該趟最大的放在第n-i(i為當前的趟數)的位置上,每趟需要進行n-i-1次兩兩比較。
二、**實現:
通過以上的講解,我們可以將**實現出來。**實現如下:(環境:vs2010 語言:c語言)
#include #include void bubblesort(int* arr, int len)
} }}int main()
; bubblesort(array, 10);
for(i = 0; i<10; i++)
printf("\n");
system("pause");
return 0;
}
這個**是最初的思想,老老實實一趟一趟排序,有些特殊情況沒有得到優化。現在我們來優化一下吧。
三、思想優化:
1.優化排序趟數:
針對基本有序或已經有序的序列,我們完全沒必要排這麼多趟。就比如說1423,我們只需要一次就可以把它排列有序。
優化思想:定義乙個標誌,如果一趟中沒有任何交換,說明這個序列已經有序,那麼我們就不需要進行後面的交換了。
**實現如下:flag1為此優化定義的標誌
void bubblesort(int* arr, int len)
} if(flag1 == 0)
}}
2.優化每趟排序中兩兩比較的次數
當後面的已經有序,我們就可以記住最後一次交換的位置,下一次比較的時候就只需要比較這個位置之前的元素。
例如,43256789 一趟排序後變為32
456789,我們記住2的位置,以後只比較2及之前的就可以了。
這樣就可以減少每趟比較的次數。
**實現如下:flag2為此優化的標誌
void bubblesort(int* arr, int len)
} k = flag2;
if(flag1 == 0)
}}
好了,氣泡排序的講解就到這裡結束了,謝謝閱讀,如有發現錯誤,歡迎指正哦!!
排序演算法之氣泡排序(一)
氣泡排序是最常使用的一種排序演算法,演算法思想是從頭到尾遍歷陣列,將相鄰的兩個值進行比較,小的放在前面,大的放在後面。這樣第一趟排序之後,最後乙個位置所放的元素就是最大的值,第二趟排序之後,倒數第二個元素也排好了。經過n次排序之後,所有的值就排序完成了。比如無序陣列 3,1,4,2,5 第一躺 1,...
排序之氣泡排序
例 將5個數字進行從大到小排序後輸出。輸入 35 99 18 12 76 輸出 99 76 35 18 12 對於例,氣泡排序大致的思路就是一趟一趟地迴圈比較,每一次迴圈的目的都是將未排序的數字中最小的數字移動到末尾。如 第一趟 xx xx xx xx 12 第二趟 xx xx xx 18 12 第...
排序之 氣泡排序
先科普一下到底什麼是氣泡排序 氣泡排序到底能幹嘛?氣泡排序 bubble sort 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...