双向起泡
算法思想:奇数趟时,从前往后依次比较相邻关键字,遇到逆序就交换元素,选出最大值,更新上界;偶数趟时,从后往前依次比较相邻元素,遇到逆序就交换元素,选出最小值,更新下界。
代码实现
void BubbleSort(ElemType A[],int n){
int low=0,high=n-1;
int i;
bool flag = true;
while(low<high&&flag){
//这里之所以要置为false,是因为当排序完成时,但low依然小于high,此时应该停止算法(因为已经排好序了),
//此时的flag一定是true,我们要想提前跳出这个循环,就是把flag值在开始时置为false.
flag = false;
for(i=low;i<high;i++){
if(A[i]>A[i+1]){
swap(a[i],a[i+1]);
flag = true;
}
}
high--;//修改上界
for(i=high;i>low;i--){
if(A[i]<A[i+1]){
swap(a[i],a[i+1]);
flag = true;
}
}
low++;//修改下界
}
}