在不同的程式語言中,冒泡演算法都是一種十分經典的演算法
其中明顯的體現了演算法的精神
作者之前雖然知道這個演算法的原理
但在上機時卻無法清楚的用所學的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...