氣泡排序及其優化

2021-10-16 17:30:06 字數 2007 閱讀 3833

演算法優化

2.記錄最後進行數字交換的位置

3.雞尾酒排序

最終優化

氣泡排序是將一組數字從第乙個數開始到第(m(陣列長度)-k(迴圈次數)-1)數,一直與後一位數進行比較(從小到大排序),大的數放後一位,小的數放前一位,總共迴圈m(陣列長度)-1次。

//data是排序的陣列,length是陣列長度

intbubblesort

(int data,

int length)}}

return0;

}

氣泡排序其實就是每一次遍歷陣列找到最大(或最小)的數放到m(陣列長度)-k(迴圈次數)-1位(即陣列從尾到頭是從大到小排序),是比較次數和排序時間比較穩定是一種排序。

如果遍歷陣列的過程中沒有進行過數字交換,設定乙個標記,表示陣列已經排序好了,就不需要繼續進行遍歷。

記錄上次遍歷最後進行數字交換的位置,因為該位置後面的數字都是排序好的,就不需要繼續排序了。

雞尾酒排序又叫雙向氣泡排序,來回排序,比原來快一點,原理就是陣列的"正序"和"逆序"程度不同,有時候正向冒泡比較快,有時候反向冒泡比較快,兩種方向結合起來,吸收各自的優點和缺點,但是優點比較大。

例如:1.陣列2,3,4,5,1的情況下正向冒泡需要4次遍歷,反向冒泡1次遍歷

2.陣列5,1,2,3,4的情況下正向冒泡需要1次遍歷,反向冒泡4次遍歷

3.而以上兩種情況雞尾酒排序都只需要2次遍歷

不過如果陣列特別"逆序"的情況下,氣泡排序和雞尾酒排序效率都很差。

int

cocktailsort

(int

*data,

int length)

} right--

;//反向冒泡終點左進

for(j = right;j > left;j --)}

left++

;//正向冒泡終點右進

}}

將1,2,3點優化結合起來

int

cocktailsort

(int

*data,

int length)

}//right--; //反向冒泡終點左進

if(flag ==0)

else

flag =0;

//每一次遍歷開始標記是0

for(j = right;j > left;j --)}

//left++; //正向冒泡終點右進

可以明顯感覺得到效率提公升。

氣泡排序及其優化

然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...

氣泡排序及其優化

課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....

氣泡排序及其優化

bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽 之後做兩點小的優化。1.基礎版本bubblesort 原始版的bubblesort 時間複雜度為o n 2 function bubblesort array x,int length for int i 0 i le...