雙向冒泡排序簡單地說就是從左向右的遍歷尋最大,從右向左尋最小的過程。正常情況下,雙向冒泡排序會比普通冒泡排序快。因為代碼比較簡單就不多說了,直接上代碼。 ...
雙向冒泡排序簡單地說就是從左向右的遍歷尋最大,從右向左尋最小的過程。正常情況下,雙向冒泡排序會比普通冒泡排序快。因為代碼比較簡單就不多說了,直接上代碼。
#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; }