冒泡排序

冒泡排序(Bubble Sort)

  1. 冒泡排序的算法原理
          比较相邻的元素,如果前一个元素的值比后一个元素的值大,就交换元素的位置,对每一对元素做相同的工作。

          第一次排序:比较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放到最后位置。

  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²)。
冒泡排序的稳定性:由代码可知,当两个元素的值相等时,不会进行交换的操作,所以冒泡排序是一个稳定排序算法。

posted @ 2020-07-19 17:18  zuzuzu_code  阅读(187)  评论(0)    收藏  举报