什么是冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
这段话引用自菜鸟教程

冒泡排序的基本思想

重复地走访要排序的元素列,依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。
走访元素的工作要重复地进行,直到没有相邻元素需要交换时,说明全部元素已经排序完成。
走访的元素———比作是一个“气泡”,“气泡“一步一步向上翻滚,完成排序。

冒泡排序的可视化动画image

代码展示

从大到小排序

#inlcude <iostream>
using namespace std;
int main(){
	int a[101];
	int n;
	cin>>n;
	for(int i = 1;i<=n;i++){
		cin>>a[i];
	}
	//每趟排好一个数字,第一趟结束把最大值排好到最后一位
	for(int k = 1;k <= n-1;k++){
		for(int i=1;i<=n-k;i++){
			if(a[i]>a[i+1]){//顺序错误
				swap(a[i],a[i+1]);
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
}

从小到大排序

#inlcude <iostream>
using namespace std;
int main(){
	int a[101];
	int n,flag;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	//一共n-1趟
	for(int k=1;k<=n-1;k++) {
		//每趟排好一个数字,第一趟结束把最大值排好到最后一位
		flag=0;
		for(int i=1;i<=n-k;i++){
			if(a[i]>a[i+1]){//顺序错误
				swap(a[i],a[i+1]);
				flag=1;
			}
		}
		if(flag==0){ //这趟排序中没有出现交换
			break;//说明已经排好序了,break终止循环
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}

}