C的冒泡法回顧

2021-09-02 02:22:57 字數 2866 閱讀 6653

在不同的程式語言中,冒泡演算法都是一種十分經典的演算法

其中明顯的體現了演算法的精神

作者之前雖然知道這個演算法的原理

但在上機時卻無法清楚的用所學的c語言來表達它的原理和細節

現在特此寫一點東西來回顧和重溫這個經典的演算法

現在給出乙個隨機的整型陣列 11,4

,8,9

,3,6

,18,7

以冒泡法的原理以從小到大排序該陣列;

我們要先將11和4對比,因為11>4,所以進行一次互換

這樣就是

4,11,8,9,3,6,18,7
再用11和8做對比,11>8,再進行一次互換,如下

4,8,11,9,3,6,18,7
多次過後到這裡

4,8,9,3,6,11,18,7
11就小於18了,這裡就不能再用11來比了,要將18和7比,將18置於末尾

第一輪迴圈就完成了,最大的數就沉底了

4,8,9,3,6,11,7,18
下面就要再開始一次迴圈

以4開始

因為4<8,不進行互換,用8來對比

同理,用9比3,6,就將3和6拎到前面

像這樣

4,8,3,6,9,11,7,18
同上理,用11和7比,將它們互換,就完成了第二輪迴圈,第2大的數11就沉底了

4,8,3,6,9,7,11,18
同時由於在第一輪的迴圈中,最大的數已經沉底了,所以這次迴圈少一次比較接著開啟第3輪迴圈

依然由4開始,

4<8,再用8來比,經過幾次互換後,將3,6再次拎到前面

4,3,6,8,9,7,11,18
這裡8<9,不互換,用9來比,將7換到前面

4,3,6,8,7,9,11,18
至此第3個數沉底

下面不再細講,規律已經十分清楚了

下一次迴圈後達到這個效果

3,4,6,7,8,9,11,18
現在這個陣列就完成了冒泡法的排序;

下面將這個規律概況到程式中去

#include

intmain()

for(i=

0;i<

9;i++

)//最後乙個元素後面沒有元素了,故只要執行10-1=9次就完成}}

//通常不需要這麼多次迴圈,這裡為了要滿足一種一種最壞的,也是時間

printf

("氣泡排序後如下:\n");

//和空間複雜都最高的即從大到小的排列情況,相反,若輸入1個從

//小到大的序列,理論上就不需要執行迴圈,這也是我們老師提到並講過的情況,我們必須加以改進

for(i=

0;i<

10;i++

)}

下面貼出程式的執行截圖

老師在將這個方法時,說要針對我在上乙個**中存在的問題,要像辦法解決要用標記來進行判斷(也就是我們大的定義中的布林型變數)

下面給出操作**

#include

intmain()

for(i=

0;i<

9;i++)}

if(flag==0)

//最後利用乙個分支來始沒有交換的時候跳出,這樣可以減少計算次數

}printf

("氣泡排序後如下:\n");

for(i=

0;i<

10;i++

)}

現在給出程式執行截圖

但優化的方法並不只有一種,

作者在寫這篇帖子時在網上查閱了相關的資料,

找到了一些很好的方法在本站

由於我沒有看過資料結構和演算法的書籍

我在瀏覽時感覺被演算法淹沒,不知所措。

若以後有時間再來續寫其他方法,

現在時23點44分,

今天又是新的的一天,我把氣泡排序寫成函式

下面是我的操作**

#include

void

maopao

(int a)

;void

put_int_array

(int a,

int n)

;int

scanf_int_array

(int a,

int x);

intmain()

//我喜歡簡短的主函式

void

maopao

(int a)

}}}void

put_int_array

(int a,

int n)

//乙個用於輸出整型陣列的函式

}int

scanf_int_array

(int a,

int x)

//乙個用於輸入整型陣列的函式

}

下面給出程式執行的截圖

最後給出一篇關於冒泡法優化的帖子鏈結供參考

參考方法

C 氣泡排序法

using system using system.collections.generic using system.text 該方法獲得需要排序的陣列,表呼叫排序方法進行排序 public static void sortednumbers 個數字 numbercount for int i 0 ...

C 氣泡排序法

比較兩個相鄰的數的大小,每次比較完後把最大的數放到本輪的末尾。假設有陣列 258,445,131,97,22,36,17,38,28,28,第一輪 258和445比較,位置不用交換。第二輪 445和131比較,445比131大,那麼445在後,131在前,以此類推,第一輪 結果為 258,131,9...

回顧C 經典演算法氣泡排序

冒泡演算法的原理 舉例說明 要排序陣列 int arr 第一趟排序 第一次排序 6和3比較,6大於3,交換位置 3 6 8 2 9 1 第二次排序 6和8比較,6小於8,不交換位置 3 6 8 2 9 1 第三次排序 8和2比較,8大於2,交換位置 3 6 2 8 9 1 第四次排序 8和9比較,8...