双向冒泡排序简单地说就是从左向右的遍历寻最大,从右向左寻最小的过程。正常情况下,双向冒泡排序会比普通冒泡排序快。因为代码比较简单就不多说了,直接上代码。

#include<iostream>
using namespace std;

//双向冒泡
void dbSort(int* a,int n)
{
    int l,r;
    bool flag = true;  //是否需要排序
    l = 0;
    r = n-1;
    while(l < r && flag)
    {
        flag = false;
        //从左到右排序
        for(int i=l;i<r;++i)
        {
            if(a[i] > a[i+1])
            {
                swap(a[i],a[i+1]);
                flag = true;
            }
        }
        --r;    //经过排序,r位置的数据已排好

        //从有到左排序
        for(int i=r;i>l;--i)
        {
            if(a[i] < a[i-1])
            {
                swap(a[i],a[i-1]);
                flag = true;
            }
        }
        ++l;    //经过排序,l位置的数据已排好
    }
}

int main()
{
    //test code
    int a[] = {9,10,7,1,6,8,4,2,5,3};
    int n = sizeof(a) / sizeof(int);
    dbSort(a,n);
    for(int i=0;i<n;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}