一文搞懂氣泡排序 C語言

2020-10-11 21:00:13
#include<stdio.h>

void bubble(int a[],int len){
//	int len = sizeof(a)/sizeof(int); //這樣寫是錯誤的,因為a傳進來的是個指標,sizeof(a)是8
	for(int i=0;i<len-1;i++)
		for(int j=0;j<len-1;j++)
			if(a[j]>a[j+1]){
				int t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
//優化寫法
//	for(int i=0;i<len-1;i++){
//		int flag = 0;
//		for(int j=0;j<len-1-i;j++){//-i是因為後面已經排好了 
//			if(a[j]<a[j+1]){
//				flag = 1;
//				int t = a[j];
//				a[j] = a[j+1];
//				a[j+1] = t;
//			}
//		}
//			if(flag==0)
//				break;//一次下來陣列沒有變化,則已完成排序
//	}
}

void print (int a[],int len){
	for(int i=0;i<len;i++)
		printf("%d ",a[i]);
	putchar('\n');
}
main(){
	
	int a[]={1,3,5,9,2,4,10,8,7};
	int len = sizeof(a)/sizeof(int);
	bubble(a,len);
	print(a,len);
	
}