【C語言】兩種方式實現冒泡排序算法


題目要求

編寫一個C語言程序,實現基本的冒泡排序算法.

算法

冒泡排序,用一句話來總結:

一組數中,相鄰的兩個數進行比較、交換,將最大(小)數交換至尾(首)部,即完成了一次冒泡排序

要想對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;
}

輸出結果

兩種方式實現冒泡排序輸出結果

以上只是冒泡排序算法的基本實現,還有很大的優化空間.至於優化的具體細節,詳見下文.

(本文來源於互聯網,若有侵權,請聯系博主)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM