题目
实现双向冒泡排序,即排序过程中,正反两个方向进行冒泡排序,从前往后的冒泡排序,将关键字最大的放在末尾,从后往前的冒泡排序将最小的关键字放在首位
代码
/**
* 实现双向冒泡排序,即排序过程中,正反两个方向进行冒泡排序,
* 从前往后的冒泡排序,将关键字最大的放在末尾,从后往前的冒泡排序将最小的
* 关键字放在首位
**/
#include <iostream>
using namespace std;
void dispArray(int a[],int n){
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
/**
* 双向冒泡排序的实现
**/
void BidBubbleSort(int a[],int n){
int low=0,high=n-1,flag;
while(low<high)i
flag=0; //是否发生交换的标志,若果一趟排序没有发生交换则可以认为该序列已经有序了
for(int i=low;i<high;i++){
//从前往后找最大的
if(a[i+1]<a[i]){
swap(a[i+1],a[i]);
flag=1;
}
}
high--; //乱序长度减一
for(int j=high;j>low;j--){
//从后往前找最小的
if(a[j-1]>a[j]){
swap(a[j-1],a[j]);
flag=1;
}
}
if(flag==0) //若果没有发生交换,就直接可以跳出循环了
break;
low++; //乱序序列减一
}
}
int main() {
int a[10]={
2,1,5,4,2,8,34,12,11,9};
dispArray(a,10);
BidBubbleSort(a,10);
dispArray(a,10);
return 0;
}