排序(一)之氣泡排序Bubble Sort

2021-07-12 06:02:52 字數 1761 閱讀 8452

一、氣泡排序的演算法思想

直接講思想可能不好理解,咱們先看看下面這個例子吧。

有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 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...