【蛻變之路】第2天 Java知識點一 (2019年2月20日)

    

    冒泡排序(BubbleSort)

        

  1. 1、基本思想:兩個數比較大小,較大的數下沉,較小的數冒起來。

  2. 2、過程:

    1.   比較相鄰的兩個數據,如果第二個數小,就交換位置。

  • 從後向前兩兩比較,一直到比較最前兩個數據。最終最小數被交換到起始的位置,這樣第一個最小數的位置就排好了。

  • 繼續重複上述過程,依次將第2.3...n-1個最小數排好位置。

        3、平均時間複雜度O(n2)

       4、java代碼實現:

        public static void BubbleSort(int [] arr){
        
             int temp;//臨時變量
             for(int i=0; i<arr.length-1; i++){   //表示趟數,一共arr.length-1次。
                 for(int j=arr.length-1; j>i; j--){
        
                     if(arr[j] < arr[j-1]){
                         temp = arr[j];
                         arr[j] = arr[j-1];
                         arr[j-1] = temp;
                     }
                 }
             }
         }

        5、優化:

            1、針對問題:
                    數據的順序排好之後,冒泡算法仍然會繼續進行下一輪的比較,直到arr.length-1次,後面的比較沒有意義的。

  •         2、方案:
                   設置標誌位flag,如果發生了交換flag設置爲true;如果沒有交換就設置爲false。
                   這樣當一輪比較結束後如果flag仍爲false,即:這一輪沒有發生交換,說明數據的順序已經排好,沒有必要繼續進行下去。

    • public static void BubbleSort1(int [] arr){
      
         int temp;//臨時變量
         boolean flag;//是否交換的標誌
         for(int i=0; i<arr.length-1; i++){   //表示趟數,一共arr.length-1次。
      
             flag = false;
             for(int j=arr.length-1; j>i; j--){
      
                 if(arr[j] < arr[j-1]){
                     temp = arr[j];
                     arr[j] = arr[j-1];
                     arr[j-1] = temp;
                     flag = true;
                 }
             }
             if(!flag) break;
         }}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章