# 基本思想
氣泡排序(bubble sort),是一類「交換」類排序方法,類似水中冒泡,最大的資料會沉到水底,較小的數會浮上來。很簡單,以從小到大排序為例,每一趟排序將「逆序」(前乙個元素比後乙個元素大)相鄰兩個資料元素交換,這樣就會將最大的元素交換到「最後」的位置,氣泡排序每趟子排序過程都會將當前「最大」元素交換到最後位置,較小的元素會漸漸排到前面。
氣泡排序時間複雜度是o(n^2),是穩定的排序,當初始序列為從小到大有序時,僅需要進行n-1次關鍵字比較,不需要移動任何記錄,即可完成排序過程;當初始序列從大到小逆序時,需要進行n-1趟排序,進行n(n-1)/2次比較和交換。
舉例來說:
例如:給定10個整數:(4,3,1,2,6,5,0,9,8,7) 從小到大排序。
第一趟子排序:針對整個資料記錄(4,3,1,2,6,5,0,9,8,7)
3和4 逆序,交換,得到(3,4,1,2,6,5,0,9,8,7)
1和4 逆序,交換,得到(3,1,4,2,6,5,0,9,8,7)
4和2 逆序,交換,得到(3,1,2,4,6,5,0,9,8,7)
4和6 有序,不交換,不變化(3,1,2,4,6,5,0,9,8,7)
6和5 逆序,交換,得到(3,1,2,4,5,6,0,9,8,7)
6和0 逆序,交換,得到(3,1,2,4,5,0,6,9,8,7)
6和9 有序,不交換,不變(3,1,2,4,5,0,6,9,8,7)
9和8 逆序,交換,得到(3,1,2,4,5,0,6,8,9,7)
9和7 逆序,交換,得到(3,1,2,4,5,0,6,8,7,9)
很明顯,一趟子排序後,在整個資料記錄(4,3,1,2,6,5,0,9,8,7)得到最大的資料元素9,現在的資料記錄為(3,1,2,4,5,0,6,8,7,9)。
第二趟子排序:對資料子記錄(3,1,2,4,5,0,6,8,7)進行相同的交換過程,注意9可以不參與排序了。
直到:一趟排序過程中,沒有任何交換資料元素的操作即為有序。
# **實現
/*
****************************************==
名稱 :c語言必學的12個排序演算法
功能 :氣泡排序
環境 :windows 10 + dev-c++編譯
作者 :乙隻會c的貓
時間 :2020.7.19
****************************************==
*/
#include
void bubble_sort(int a, int length)
}
}
}
int main(void)
;
bubble_sort(a, 10);
int i;
for(i=0; i<10; i++)
printf("%d ", a[i]);
return 0;
}
最全C語言檔案操作談不上,C語言基礎教程之檔案操作
c語言檔案讀寫 開啟檔案 讀寫檔案 關閉檔案 開啟檔案 您可以使用 fopen 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別 file 的乙個物件,型別 file 包含了所有用來控制流的必要的資訊。下面是這個函式呼叫的原型 在這裡,filename 是字串,用來命名檔案,訪問模...
C語言基礎學習教程基本語法
c 的令牌 token c 程式由各種令牌組成,令牌可以是關鍵字 識別符號 常量 字串值,或者是乙個符號。例如,下面的 c 語句包括五個令牌 printf hello,world n 這五個令牌分別是 printf hello,world n 分號 在 c 程式中,分號是語句結束符。也就是說,每個語...
C語言小教程
基本格式 include include int main 輸出字母c include stdio.h int main x y z排序 include stdio.h int main if x z 交換x,z的值 if y z 交換z,y的值 printf small to big d d d ...