点击查看代码
#include<algorithm>
using namespace std;
/*
函数功能:双向冒泡排序(有序排序)
函数列表:
a[]:待排序序列
n:待排序元素个数
*/
void BubbleSort(int a[], int n) {
int left = 0, right = n - 1; //a[]的排序区间[left,right]
bool flag = true; //记录本轮是否有元素交换位置,true表示有
int i, j;
//flag为true表示序列有元素交换,冒泡排序未结束
while (flag) {
flag = false; //每轮开始时假设冒泡排序完成,然后再检查本轮是否有元素交换
//从左往右扫描,最大值放在右边
for (i = left; i < right; i++) {
if (a[i] > a[i + 1]) { //如果a[i]>a[i+1],则两者互换
swap(a[i], a[i + 1]);
flag = true; //有元素交换时flag设为true,表示冒泡排序未结束
}
}
right--;//扫描结束右边确定了1个元素最终位置,该元素不参与下一轮排序,右边界左移1位
//从右往左扫描,最小值放在左边
for (j = right; j > left; j--) {
if (a[j - 1] > a[j]) { //如果a[j-1]大于a[j],则两者互换
swap(a[j - 1], a[j]);
flag = true;
}
}
left++;//扫描结束左边确定了1个元素最终位置,该元素不参与下一轮排序,左边界右移1位
}
}