点击查看代码
#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;
}