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