(三)Java數據結構和算法——冒泡、選擇、插入排序算法

1、冒泡排序

  • 冒泡算法的運做規律以下:

  ①、比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。算法

  ②、對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。這步作完後,最後的元素會是最大的數(也就是第一波冒泡完成)。數組

  ③、針對全部的元素重複以上的步驟,除了最後一個。性能

  ④、持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。測試

 

  • 代碼實現
   public static int[] sort(int[] array){

         //這裏for循環表示總共須要比較多少輪
        for(int i=1;i<array.length;i++){
        // j的範圍很關鍵,這個範圍是在逐步縮小的,由於每輪比較都會將最大的放在右邊
            for(int j=0;j<array.length-i;j++){
                if(array[j]>array[j+1]){
                    int temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
        }

        return array;
    }
  • 測試
 public static void main(String[] args) {
        int [] array = {9,222,100,4,8,6,35,2,4,1,0};
        Maopao.sort(array);

        for(int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }

    }
  • 結果

 

  •  冒泡排序解釋:

  冒泡排序是由兩個for循環構成,第一個for循環的變量 i 表示總共須要多少輪比較,第二個for循環的變量 j 表示每輪參與比較的元素下標【0,1,......,length-i】,由於每輪比較都會出現一個最大值放在最右邊,因此每輪比較後的元素個數都會少一個,這也是爲何 j 的範圍是逐漸減少的。相信你們理解以後快速寫出一個冒泡排序並不難。spa

  •  性能分析

 

假設參與比較的數組元素個數爲 N,則第一輪排序有 N-1 次比較,第二輪有 N-2 次,如此類推,這種序列的求和公式爲:code

  (N-1)+(N-2)+...+1 = N*(N-1)/2blog

  當 N 的值很大時,算法比較次數約爲 N2/2次比較,忽略減1。排序

  假設數據是隨機的,那麼每次比較可能要交換位置,可能不會交換,假設機率爲50%,那麼交換次數爲 N2/4。不過若是是最壞的狀況,初始數據是逆序的,那麼每次比較都要交換位置。for循環

  交換和比較次數都和N2 成正比。因爲常數不算大 O 表示法中,忽略 2 和 4,那麼冒泡排序運行都須要 O(N2) 時間級別。性能分析

  其實不管什麼時候,只要看見一個循環嵌套在另外一個循環中,咱們均可以懷疑這個算法的運行時間爲 O(N2)級,外層循環執行 N 次,內層循環對每一次外層循環都執行N次(或者幾分之N次)。這就意味着大約須要執行N2次某個基本操做。

相關文章
相關標籤/搜索