排序--冒泡排序

按照由小到大的順序排列,冒泡排序基本步驟:算法

一、比較相鄰兩個數值的大小,將數值大的交換到數值小的後面,數據交換的時候須要1個臨時變量空間;優化

二、對剩下的n-1個數值重複1的步驟,直到剩下的數值個數爲1。blog

好比5,4,3,2,1的排序步驟以下:排序

第一遍:四、五、三、二、1;    四、三、五、二、1;    四、三、二、五、1;    四、三、二、一、5變量

第二遍:三、四、二、一、5;    三、二、四、一、5;    三、二、一、四、5lucene

第三遍:二、三、一、四、5;    二、一、三、四、5im

第四遍:一、二、三、四、5d3

時間複雜度爲:數據

數據交換次數與時間複雜度同樣。img

當數據自己有序時如一、二、三、四、5,能夠在以上的步驟進行優化,即在第一遍過程當中發現沒有數據發生交換就能夠判斷數據已經有序,此時的時間複雜度爲N-1。當數據基本有序時如二、三、一、四、5,比較的次數永遠都是上述最壞時間複雜度,可是數據交換的次數會少點。因爲在絕大部分狀況下,給定的數據極少是已經有序的,因此冒泡排序的平均時間複雜度是N*(N-1)/2

這裏並無用大O表示法,由於在實際的排序算法中,當數據個數到必定程度時會使用其它排序算法,好比在lucene中IntroSorter下,元素個數達到20的時候用二分插入排序,至於這個20是怎麼來的,我的認爲只有把完整的時間複雜度公式表達出來才能求出。

冒泡排序算法是穩定的,由於當相鄰的數據相同時不會發生位置交換,即便不相鄰的數據相同時也不會發生位置交換。

相關文章
相關標籤/搜索