算法思想:
在正反两个方向交替进行扫描,即第一趟把关键字最大的元素放到序列的最后面,第二趟把关键字最小的元素放到序列的最前面,如此反复
算法实现:
跟普通冒泡差不多,就是多设两个指针来控制边界就可以了
#include <bits/stdc++.h>
using namespace std;
void DoBubbleSort(int a[],int left,int right){
int low,high;
low = left;
high = right;
bool chang = true;
while(low < high && chang){
chang = false;
for(int i = low ; i <= high - 1 ; i++){
if(a[i] > a[i+1]){
swap(a[i],a[i+1]);
chang = true;
}
}
high--;
for(int i = high ; i > low ; i--){
if(a[i] < a[i - 1]){
swap(a[i],a[i-1]);
chang = true;
}
}
low++;
}
}
int main()
{
int a[100];
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
DoBubbleSort(a,1,n);
for(int i = 1 ; i <= n ; i++){
cout << a[i] << " ";
}
cout << endl;
return 0;
}