數組的冒泡排序

冒泡排序算法的原理以下:
1.比較相鄰的元素。若是第一個比第二個大,就交換他們兩個,不然不交換
2.對每一對相鄰元素作一樣的工做,從開始第一對到結尾的最後一對。作完這一步,最後的元素應該會是最大的數。
3.針對全部的元素重複以上的步驟,除了最後一個。
4.持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。

 例如:給定int[] arr={13,46,22,65,3},定義一個方法將數組冒泡排序,並打印    算法

分析過程 
第一輪比較: 裏面比較了四次                        i=0時;j=0,1,2,3,(即j=0;j<4;j++)
       {13,46,22,65,3}   13<46   不交換  arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,46,22,65,3}   46>22   交換    arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       {13,22,46,65,3}   46<65   不交換  arr[2]與arr[3]--->j=2:arr[j]與arr[j+1]比較
       {13,22,46,65,3}   65>3    交換    arr[3]與arr[4]--->j=3:arr[j]與arr[j+1]比較
       最終排序{13,22,46,3,65}得出第一個最大數65

第二輪比較:裏面比較了三次                         i=1時;j=0,1,2,(即j=0;j<3;j++)     
       {13,22,46,3}    13<22  不交換   arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,22,46,3}    22<46  不交換   arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       {13,22,46,3}    46>3   交換       arr[2]與arr[3]--->j=2:arr[j]與arr[j+1]比較
       最終排序{13,22,3,46}得出次大數46

第三輪比較:裏面比較了兩次                        i=2時;j=0,1,(即j=0;j<2;j++)
       {13,22,3}   13<22   不交換     arr[0]與arr[1]--->j=0:arr[j]與arr[j+1]比較
       {13,22,3}   22>3     交換        arr[1]與arr[2]--->j=1:arr[j]與arr[j+1]比較
       最終排序{13,3,22}得出第三個大的元素是22

第四輪比較:裏面比較了一次                       i=3時;j=0,(即j=0;j<1;j++)
       {13,3}   13>3    交換     arr[0]與arr[1]----->j=0:arr[j]與arr[j+1]比較
       最終排序{13,3,22}得出第四個大的元素是13

若是用i表示比較輪數,用j表示每輪裏面比較的次數,確定要用到嵌套循環
arr.length=5
i=0時;j=0,1,2,3,(即j=0;j<4;j++)  0+4=arr.length-1
i=1時;j=0,1,2,  (即j=0;j<3;j++)  1+3=arr.length-1
i=2時;j=0,1,    (即j=0;j<2;j++)  2+2=arr.length-1       得出=arr.length-1-i
i=3時;j=0,      (即j=0;j<1;j++)  3+1=arr.length-1
能夠看出外層i=0;i<arr.length-1;i++,而裏層j=0;j<;j++,?=4,3,2,1不斷遞減,能夠看出外層i
在遞增時,裏層j<?而?在遞減,最終得出得出?=arr.length-1-i,最終結果是
i=0;i<arr.length-1;i++,    j=0;j<arr.length-1-i;j++,

代碼實現以下:
public class Demo4 {
    public static void main(String[] args){
    //1.定義一個數組
        int[] arr={13,46,22,65,3};

    //2.調用bubbleSort方法
        bubbleSort(arr);
     
    //3.打印排序完的數組,即數組遍歷
    for(int i=0; i<arr.length; i++){
           System.out.println(arr[i]);
                 }
    }數組


    //2.定義一個方法用冒泡排序將數組從小到大排序
    //參數:整個方法裏面惟一可變的量就是數組,對數組排序,數組是外部給的,可變的
    //返回值:最終結果是將整個數組從新排序,不須要求值,因此沒有返回值
    public static void bubbleSort(int[] arr){
        for(int i=0; i<arr.length; i++){//控制比較的輪數,即數組長度-1,因此i<arr.length
                  for(int j=0; j<arr.length-1-i; j++){//控制每輪裏面比較的次數
                      if(arr[j]>arr[j+1]){//若是第一個比第二個大,就交換他們兩個
                           int temp=arr[j];
                          arr[j]=arr[j+1];
                          arr[j+1]=temp;  spa

                     }  
                  }
           }
    }
}排序

相關文章
相關標籤/搜索