C语言实现双向冒泡排序

题目

实现双向冒泡排序,即排序过程中,正反两个方向进行冒泡排序,从前往后的冒泡排序,将关键字最大的放在末尾,从后往前的冒泡排序将最小的关键字放在首位

代码

/**
* 实现双向冒泡排序,即排序过程中,正反两个方向进行冒泡排序,
* 从前往后的冒泡排序,将关键字最大的放在末尾,从后往前的冒泡排序将最小的
* 关键字放在首位
**/

#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;
}

运行效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/niulinbiao/article/details/127605665