題目要求
算法
冒泡排序,用一句話來總結:
一組數中,相鄰的兩個數進行比較、交換,將最大(小)數交換至尾(首)部,即完成了一次冒泡排序
要想對N個數字進行排序,循環N次即可.
如果真的不理解冒泡排序算法,請點擊:冒泡排序_360百科
核心代碼
//方式一:從頭向尾遍歷,將最大數(相對)沉入尾部(相對)
void BubbleSort1(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=0;j<sz-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
//方式二:從尾向頭遍歷,將最大數(相對)冒泡到頭部(相對)
void BubbleSort2(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=sz;j>i;j--){
if(arr[j]>arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
完整代碼
/*
*本代碼版權歸高小調博客所有
*作者:高小調
*日期:2016-9-9
*代碼功能:通過C語言實現冒泡排序算法
*集成開發環境:Microsoft Visual Studio 2010
*/
#include<stdio.h>
#include<assert.h>
#include<stdlib.h.h>
//從頭向尾遍歷
//相鄰兩數進行比較
//將最大數(相對)沉入尾部(相對)
void BubbleSort1(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=0;j<sz-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
//從尾向頭遍歷
//相鄰兩數進行比較
//將最小數(相對)冒泡到頭部(相對)
void BubbleSort2(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=sz;j>i;j--){
if(arr[j]>arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
//測試函數
//為了方便起見,將參數設定為一個函數指針
void TestBubbleSort(void (*BubbleSort)(int *arr,int sz)){
int arr[]={1,3,5,7,9,2,4,6,8,0};
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
BubbleSort(arr,sz);
for(i=0; i<sz; i++){
printf("%d ",arr[i]);
}
printf("\n");
}
int main(){
TestBubbleSort(BubbleSort1);
TestBubbleSort(BubbleSort2);
system("pause");
return 0;
}
輸出結果

以上只是冒泡排序算法的基本實現,還有很大的優化空間.至於優化的具體細節,詳見下文.
(本文來源於互聯網,若有侵權,請聯系博主)
