冒泡排序

点击查看代码
#include<iostream>
using namespace std;

/*
函数功能:冒泡排序(升序排序)
函数列表:
a[]:待排序数组
n:待排序元素个数
*/
void BubbleSort(int a[], int n) { 
	int i, j, tmp, flag;
	for (i = 0; i < n - 1; i++) //n个数进行冒泡排序要比较n-1轮
	{
		flag = 0; //用flag标记本轮排序是否发生了元素交换,flag为0表示无元素交换,为1表示有元素交换
		//元素判断范围[0,n-1-i),第一轮比较范围[0,n-1),第二轮[0,n-2),...,最后一轮[0,1)
		//在下面判断语句是判断前后两个元素大小,因此for循环右边界不包含n-1-i
		for (j = 0; j < n - 1 - i; j++) { 
			if (a[j] > a[j + 1]) { //前一个元素大于后一个元素则互换
				tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
				flag = 1; //有元素交换时,设flag为1
			}
		}
		//如果本轮没有元素交换,则表示整个序列已经有序,可以提前结束排序
		if (flag == 0) { 
			return;
		}
	}
}

int main() {
	int a[] = { 80,30,60,40,20,10,50,70 };
	int n = (sizeof(a)) / (sizeof(a[0]));
	cout << "序列个数:" << n << endl;
	cout << "排序前:";
	for (int i = 0; i < n; i++) {
		cout << a[i] << " ";
	}
	cout << endl;
	BubbleSort(a, n); //优化冒泡排序
	cout << "排序后:";
	for (int i = 0; i < n; i++) {
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}

posted @ 2022-09-25 14:54  zhaoo_o  阅读(2)  评论(0编辑  收藏  举报