双向冒泡排序
描述
有n个整数构成无序序列a,设计一个双向冒泡排序算法对序列a进行递减排序,即在排序过程中交替改变扫描序列的方向。
输入
第一行:n
第二行:n个整数
输出
排序后的序列a(整数之间用一个空格分隔)
样例输入
10
2 1 9 5 7 6 0 3 8 4
样例输出
9 8 7 6 5 4 3 2 1 0
题解
#include<iostream>
using namespace std;
void display(int a[], int size)
{
for (int k = 0; k < size; k++)
{
cout << a[k] << " ";
}
}
void Swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void doubleBubble(int s[],int sz)
{
int left, right,key, i;
left = 0;
right = sz- 1;
key = 1;
while (left < right) {
for (i = left; i < right; i++) {
if (s[i] < s[i + 1]) {
Swap(s[i], s[i + 1]);
key = i;
}
}
right =key;
for (i = right - 1; i >= left; i--) {
if (s[i] < s[i + 1]) {
Swap(s[i], s[i + 1]);
key = i + 1;
}
}
left =key;
}
}
int main()
{
int n, a[1000];
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
doubleBubble(a, n);
display(a, n);
}