冒泡排序(Bubble Sort)是一種程式設計中較簡單的排序演算法。它重複地走訪要排序的數列,一次比較兩個元素,如果它們的順序錯誤,就把它們交換過來。重複地進行走訪數列的工作直到沒有再需要交換的元素,這也意味著該數列已經完成排序。
冒泡排序就像氣泡從水中出現一樣,在氣泡排序中最小或最大的數字,取決於我們是按升序還是降序排序數組,氣泡朝著數組的開始或結束冒出。
1)比較相鄰的元素,如果第一個比第二個大,就交換他們兩個。
2)對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對,在這一點,最後的元素應該會是最大的數。
3)針對所有的元素重複以上的步驟,除了最後一個。
4)持續對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
與其他排序演算法,諸如快速排序、歸併排序或shell排序相比,冒泡排序表現不佳。這些演算法的平均情況複雜度為O(nlogn),而冒泡排序平均情況複雜度為O(n^2)。
在最佳情況下,冒泡排序比具有O(n)性能的快速排序更好。冒泡排序比快速排序或歸併排序慢三倍,即使n=100,但它更容易實現和記憶。
冒泡排序的複雜度和效能如下:
1)冒泡排序最差情況表現O(n^2)
2)冒泡排序最佳狀況表現O(n)
3)冒泡排序平均狀況表現O(n^2)
//冒泡排序publicstaticvoidbubbleSort(int[]arr){//外層迴圈用來控制陣列迴圈的圈數for(inti=0;i<arr.length-1;i++){//內層迴圈用來完成元素值比較,把大的元素值互換到後面for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){inttemp= arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}//輸出結果for(intn:nums){System.out.println(n);} }
例如:
publicclassMain{publicstaticvoidmain(String[]args){inta[]={6,1,15,32,9};for(inti=1;i<a.length;i++){for(intj=0;j<a .length-1;j++){if(a[j]>a[j+1]){inttemp=a[j];a[j]=a[j+1];a[j+1]=temp ;}}}System.out.println(冒泡排序的結果是:);for(inttemp:a){System.out.print(temp+);}}}
運行結果如下:
冒泡排序的結果是:1691532
大家可以親自上機實驗!