天天看點

Java常見排序算法之冒泡排序

在學習算法的過程中,我們難免會接觸很多和排序相關的算法。總而言之,對于任何程式設計人員來說,基本的排序算法是必須要掌握的。

從今天開始,我們将要進行基本的排序算法的講解。Are you ready?Let‘s go~~~

1、排序算法的基本概念的講解

     時間複雜度:需要排序的的關鍵字的比較次數和相應的移動的次數。

     空間複雜度:分析需要多少輔助的記憶體。

     穩定性:如果記錄兩個關鍵字的A和B它們的值相等,經過排序後它們的位置沒有發生交換,那麼我們稱這個排序算法是穩定的。

              否則我們稱這個排序算法是不穩定的。

    排序算法的常見分類:

    1、内部排序(最常見的一種排序方式,不需要借助第三方輔助存儲工具)

    2、外部排序(需要借助外部存儲來輔助完成相關的排序操作)

        如果參與排序的資料元素非常的多,資料量非常的大,計算機無法把整個排序過程放到記憶體中進行的話,

        我們必須借助外部存儲器如磁盤來完成,這種排序方式,我們稱之為外部排序。

        其中外部排序最常見的就是多路歸并排序,即将原始檔案分解成多個能夠一次性裝入記憶體的部分,分别把每一部分調入

        記憶體完成相應的排序,接下來在對多個有序的外部檔案進行多路歸并排序。

   對于我們絕大多數的程式員而言,我們經常遇到的為内部排序。接下來我們将要對常見的内部排序進行相應的講解。

    今天要講解的内部排序為:

   冒泡排序

  1、冒泡排序的基本概念的講解

   冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。

   它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,

   也就是說該數列已經排序完成。

   這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名冒泡排序。

   冒泡排序算法的運作如下:(從後往前)

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。[

 2、Java代碼實作冒泡排序

package com.yonyou.test;

/**
 * 内部排序算法之冒泡排序
 * 預設按照從小到大進行排序操作
 * @author 小浩
 * @建立日期 2015-3-24
 */
public class Test{
   public static void main(String[] args) {
   //需要進行排序的數組
   int[] array=new int[]{8,3,2,1,7,4,6,5};
    //輸出原數組的内容
    printResult(array);
   //進行冒泡排序操作
   for(int i=0;i<array.length-1;i++)
   {
       for(int j=0;j<array.length-1-i;j++)
       {
         if(array[j]>array[j+1])
         {
            swap(array,j,j+1);
         }
       }
   }

   //輸出排序後的相關結果
   printResult(array);
   }



   /**
    * 輸出相應數組的結果
    * @param array
    */
   private static void printResult(int[] array) {
       for(int value:array)      
         System.out.print(" "+value+" ");
      System.out.println();
   }

   /**
    * 交換數組中兩個變量的值
    * @param array
    * @param i
    * @param j
    */
   private static void swap(int[] array,int i,int j){
      int temp=array[i];
      array[i]=array[j];
      array[j]=temp;
   }
}