排序演算法之氣泡排序(C語言)

2021-10-03 19:20:36 字數 1695 閱讀 4564

我們採用傳統的三段式思維來學習:是什麼?為什麼?怎麼做?

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

氣泡排序的原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的乙個或最小的乙個。這個數就會從序列的最右邊冒出來。

以從小到大排序為例,第一輪比較後,所有數中最大的那個數就會浮到最右邊;第二輪比較後,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最後實現從小到大排序。

舉個栗子:

4 2 3 1 5

第一輪比較:

(1)   4 和 2比,4>2,它們交換位置       結果:2 4 3 1 5

(2)   4和 3 比,4>3,它們交換位置        結果:2 3 4 1 5

(3)4 和 1 比,4>1,它們交換位置        結果:2 3 1 4 5

(4)4和 5 比,4<5,不交換位置             結果:2 3 1 4 5

到此第一輪就比較完了。第一輪的結果是找到了序列中最大的那個數,並浮到了最右邊。

比較時,每輪中第 n 次比較是新序列中第 n 個元素和第 n+1 個元素的比較(假如 n 從 1 開始)。

第二輪比較:

(1) 2和3比,2<3,不交換位置             結果:2 3 1 4 5

(2) 3 和1比,3>1,它們交換位置        結果:2 1 3 4 5

(3)3和4比,3<4,不交換位置                 結果:2 1 3 4 5

到此第二輪就比較完了。第二輪的結果是找到了序列中第二大的那個數,並浮到了最右邊第二個位置。

第三輪比較:

(1)2和1比,2>1,它們交換位置      結果:1 2 3 4 5

(2)2和3比,2<3,不交換位置          結果:1 2 3 4 5

到此第三輪就比較完了。第三輪的結果是找到了序列中第三大的那個數,並浮到了最右邊第三個位置。

第四輪比較:

(1)1和2比,1<2,不交換位置          結果:1 2 3 4 5

至此,我們就比較完了。結果是1 2 3 4 5。

總結:n 個資料,只需要比較 n–1 輪。因為每輪我們都把最大的數排到了最後邊,所以每輪都會比較少乙個數。

下面寫乙個程式:

#include

//氣泡排序//

int main()

;//這裡要注意的是陣列的下標是從0開始的

int n=sizeof(a)/sizeof(a[0]);//存放陣列a中元素的個數//

int buf;

for(int i=0;ifor (int i=0; iprintf("\n");

return 0;

}輸出結果是:43 12 9 8 7 6 5 4 3 1

C語言 排序演算法之氣泡排序

氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。維基百科 氣泡排...

C語言排序演算法之氣泡排序

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...

演算法之氣泡排序 C語言

氣泡排序 從小到大 演算法思想 遍歷一n個資料的陣列,比較相鄰資料的大小,把小值放前面,大值放後面,比較數次後,該組資料由小到大排列。假設最小值在最後乙個位置,則須經過n 1次才能把最小值交換到第一位,即比較次數最多為n 1次。對於內迴圈的迴圈不變式 初始化 第一次遍歷前,in index之前沒有值...