十大經典排序算法之冒泡排序

C語言例程

//十大排序算法之冒泡排序
//作者:Hengda

#include <stdio.h>

// 打印指定指定一維數組的數據
void displayDt( int num, int dt[] ) {
	for ( int i = 0; i < num; i++ ) {
		printf( "%d ", dt[i] );
	}
	printf( "\r\n" );
}

// 冒泡排序-由小到大
void bubbleSortAsc(int num, int dt[]) {
	printf("排序前:");
	displayDt(num, dt);
	int val = 0;
	int flag = 0;
	// 進行 num-1 輪梯度比較並交換
	for (int i = num - 1; i > 0; i--) {
		flag = 0; // 用於標記本輪遍歷是否發生了交換
		for (int j = 0; j < i; j++) {
			if (dt[j] >= dt[j + 1]) {
				val = dt[j];
				dt[j] = dt[j + 1];
				dt[j + 1] = val;
				flag = 1;// 發生了交換
			}
		}
		if (flag == 0) break; // 本輪沒有發生交換,說明排序已完成,則不再進行後續遍歷
	}
	printf("排序後:");
	displayDt(num, dt);
}

//冒泡排序-由大到小
void bubbleSortDesc(int num, int dt[]){
	printf("排序前:");
	displayDt(num, dt);
	int val = 0;
	int flag = 0;
	// 進行 num-1 輪梯度比較並交換
	for (int i = num - 1; i > 0; i--) {
		flag = 0; // 用於標記本輪遍歷是否發生了交換
		for (int j = 0; j < i; j++) {
			if (dt[j] <= dt[j + 1]) {
				val = dt[j];
				dt[j] = dt[j + 1];
				dt[j + 1] = val;
				flag = 1;// 發生了交換
			}
		}
		if (flag == 0) break; // 本輪沒有發生交換,說明排序已完成,則不再進行後續遍歷
	}
	printf("排序後:");
	displayDt(num, dt);
}

//主函數
int main() {
	int dt[10] = { 29, 35, 12, 64, 3, 96, 5, 143, 31, 46 };
	int num = sizeof(dt) / sizeof(int);
	// 由小到大
	bubbleSortAsc( num, dt );
	// 輸出結果
	// 排序前:29 35 12 64 3 96 5 143 31 46
	// 排序後:3 5 12 29 31 35 46 64 96 143

	// 由大到小
	//bubbleSortDesc( num, dt );
	// 輸出結果
	// 排序前:29 35 12 64 3 96 5 143 31 46
	// 排序後:143 96 64 46 35 31 29 12 5 3
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章