#include<stdio.h>
void BiBuddle(int array[],int n){
	//代表是否进行了排序
	int flag = 0;
	//每次排序最低位
	int low = 0;	
	//每次排序的最高位
	int high = n -1;
	//数组下标
	int i = 0;
	while(low < high){
 		flag = 0;
	 	//反向冒泡
		for(i = high;i>low;i--){
			if(array[i] < array[i-1]){
				int temp;
				temp = array[i];
				array[i] = array[i-1];
				array[i-1] = temp;
				flag = 1;		
			}
		}
		//反向排序找出最小的,所以最低位 ++
		low++; 

		//如果为发生排序,则跳出循环
		if(!flag){
			break;
		}
 		//正向冒泡
		for(i = low;i<high;i++){
			if(array[i] > array[i+1]){
				int temp;
				temp = array[i];
				array[i] = array[i+1];
				array[i+1] = temp;
			}
		
		}
		//正向排序找出最大的,所以最高位 --
		high--;
 	}
}
int main(){
	int i=0 ;
	int a[5] = {5,4,3,2,1};
	printf("输出原数组\n");
	for( i =0 ; i<5;i++){
		printf("%d\t",a[i]);
	}
	printf("\n"); 
	BiBuddle(a,5);
	printf("输出排序后的数组\n");
	for( i =0 ; i<5;i++){
		printf("%d\t",a[i]);
	}
	return 0;
}