冒泡排序C語言實現(編譯通過)

冒泡排序(BubbleSort)

冒泡排序的基本概念:

依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。

實現:

外循環變量設爲i,內循環變量設爲j。假如有10個數需要進行排序,則外循環重複9次,內循環依次重複9,8,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次爲1,2,...,9,對於每一個i,j的值依次爲1,2,...10-i。

下面代碼編譯通過:

#include <stdio.h>

#define TRUE 1

//以下是冒泡排序的函數定義
void bubblesort(int *a, int n){
	int i; //控制外面大循環的變量
	int j; //控制內部小循環的變量
	int temp = 0; //用於存儲兩數交換時的臨時變量
	int flag =0; //用於標記本次循環是否發生交換

	//外面的大循環,對於一個長度爲n的數組,需要循環n-1次,當沒有任何比較的時候循環即結束
	for(i = 0; i < n-1; i++) {
		flag = 0;//初始值爲0,表明剛開始沒有交換髮生
		//裏面的小循環,在每一次循環中,比較相鄰兩個元素的大小,把大的元素往後排
		for(j = n-1; j > i; j--) {
			if(a[j] < a[j-1])
			{
				//交換兩個相鄰元素
				temp = a[j];
				a[j] = a[j-1];
				a[j-1] = temp;
				flag = 1; //當此輪有交換髮生時,繼續比較
			}
		}
		if(flag == 0) //當此輪比較沒有發生交換,則說明比較已經結束
			break;
	}
}

int main() {
	int a[10] = {5,1,6,9,8,3,4,6,10,7};//待排序整形數組
	int i = 0;
	for(i=0;i < 10;i++)
		printf("%d,",a[i]);
	printf("\n");
	bubblesort(a, 10); //調用冒泡排序算法
	for(i=0;i < 10;i++)
		printf("%d,",a[i]);
	return TRUE;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章