二分答案
阿新 • • 發佈:2020-07-19
氣泡排序(Bubble Sort)
-
氣泡排序的演算法原理
比較相鄰的元素,如果前一個元素的值比後一個元素的值大,就交換元素的位置,對每一對元素做相同的工作。
第一次排序:比較4和5的大小,4<5,不交換位置。比較5和6的大小,5<6不交換。比較6和3的大小,6>3,交換位置。再比較6和2的大小,6>2交換。最後比較6和1的大小,6>1交換。第一次排序後,最大的元素6到了最後的位置,並且6將不再進行下一輪的排序。
第二次排序:比較4和5的大小,4<5,不交換位置。比較5和3的大小,5>3交換位置。比較5和2的大小,5>2交換位置。比較5和1的大小,5>1交換位置。5放到的最後位置,並且5也將不再進行下一輪排序。
第三次排序:比較4和3的大小,4>3交換位置,比較4和2的大小,4>2交換位置,比較4和1的大小,4>1交換位置。4放到最後位置並且不再參與排序。
第四次排序:比較3和2的大小,3>2交換位置,比較3和1的大小,3>1交換位置,3放到最後位置並且不參與排序。
第五次排序:比較2和1的大小,2>1交換位置。2放到最後位置。 -
氣泡排序的程式碼
public class BubbleSort { private static boolean greater(Comparable v, Comparable w){ return v.compareTo(w)>0; } private static void exch(Comparable[] a,int i,int j){ Comparable temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void sort(Comparable[] a){ //外層決定排序的次數 for(int i = a.length-1;i>0;i--){ //內層決定比較的次數 for (int j = 0;j<i;j++){ //比較索引j和索引j+1處值的大小,並判斷是否進行交換 if (greater(a[j],a[j+1])){ exch(a,j,j+1); }; } } } }
氣泡排序的時間複雜度為:O(n²)。
氣泡排序的穩定性:由程式碼可知,當兩個元素的值相等時,不會進行交換的操作,所以氣泡排序是一個穩定排序演算法。