天天看點

數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

上一篇:熟練運用數組,看這篇就夠了 | 帶你學《Java面向對象程式設計》之十七

【本節目标】

通過閱讀本節内容,你将學會通過循環巧妙地實作數組排序問題,并通過控制台輸出結果分析代碼異常,解決異常,最終完成設計,初步步入算法的領域。

數組操作案例:數組排序

數組排序指的是可以将一個雜亂的數組按照順序進行碼放,但是對于數組排序總是通過一個基礎的模型完成的,例如:本次先通過一個升序排序的方式來觀察排序的處理。

數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖一 排序過程

範例:數組排序分析

public class ArrayDemo {
     public static void main (String args[ ]) {
         int data [] = new int [] {8,9,0,2,3,5,10,7,6,1} ;
         for (int y = 0 ; y < data.length ; y ++) {
            if (data[y] > data[y + 1]){
                int temp = data[y] ;
                data[y] = data[y + 1] ;
                data[y + 1] = temp ;
            }
          }
          printArray(data) ;
     }
     public static void printArray(int temp []) {
         for (int x = 0 ; x < temp.lenght ; x ++) {
             System.out.print (temp[x] + “、”) ;
         }
     System.out.println() ;
     }
}           
數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖二 運作結果一

發生數組越界,修改:

for (int y = 0 ; y < data.length-1 ; y ++)           
數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖三 運作結果二

public class ArrayDemo {
     public static void main (String args[ ]) {
         int data [] = new int [] {8,9,0,2,3,5,10,7,6,1} ;
         for (int x =0 ; x < data.length ; x ++) {
           for (int y = 0 ; y < data.length-1 ; y ++) {
              if (data[y] > data[y + 1]){
                 int temp = data[y] ;
                 data[y] = data[y + 1] ;
                 data[y + 1] = temp ;
               }
            }
         }
        printArray(data) ;
     }
     public static void printArray(int temp []) {
         for (int x = 0 ; x < temp.lenght ; x ++) {
             System.out.print (temp[x] + “、”) ;
         }
         System.out.println() ;
     }
}           
數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖四 執行結果三

針對于已經排好序的,不需要再次進行比較,修改

for (int y = 0 ; y < data.length-x-1 ; y ++)           
數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖五 執行結果四

以上的程式代碼都是通過主方法完成的,不符合面向對象的設計結構,最好的做法是将這個排序處理的操作交給一個類進行處理完成。

優化:

class ArrayUtil {
   public static void sort(int data[]) {    //進行數組的排序處理
       for (int x =0 ; x < data.length ; x ++) {
           for (int y = 0 ; y < data.length-x-1 ; y ++) {
              if (data[y] > data[y + 1]){      //交換資料
                 int temp = data[y] ;
                 data[y] = data[y + 1] ;
                 data[y + 1] = temp ;
              }
            }
        }
   }
   public static void printArray(int temp []) {
       for (int x = 0 ; x < temp.lenght ; x ++) {
          System.out.print (temp[x] + “、”) ;
       }
       System.out.println() ;
    }
}
public class ArrayDemo {
     public static void main (String args[ ]) {
         int data [] = new int [] {8,9,0,2,3,5,10,7,6,1} ;
         ArrayUtil.sort(data) ;         //排序
         ArrayUtil.printArray(data) ;
     }    
}           
數組排序-觸摸算法的門檻 | 帶你學《Java面向對象程式設計》之十八

圖六 優化後執行結果

在以後進行類設計的時候,如果發現類中沒有屬性存在的意義,那麼定義的方法就沒有必要使用普通方法了,因為普通方法需要在有執行個體化對象産生的情況下才可以調用。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:數組算法進階之探究轉置之法 | 帶你學《Java面向對象程式設計》之十九 更多Java面向對象程式設計文章檢視此處