【算法-排序之一】冒泡排序

算法-排序之冒泡排序


若是數據按照必定的順序進行排序,數據處理的效率將顯著的提升。算法是編程的精髓,一個高效而合適的算法能極大的減小時間消耗與空間消耗,提到「合適」是由於沒有哪一個算法能夠在全部狀況下都表現出色,一樣是排序,在不一樣數據規模下各類排序算法有不一樣的效能表現,選擇合適的解決算法的才能最大限度地提升效率。 java

1.冒泡算法BubbleSort是經常使用排序算法之一,它的核心是讓大(或小)的數據像水泡同樣冒到最上端,這是經過不斷地比較兩個相鄰數據的大小,前者大於後者則交換位置來實現冒泡。 算法

以下示例: 編程

 public static int[] BubbleSort(int num[]){
  for(int i=0;i<num.length;i++){
   for(int j=1;j<num.length-i;j++){
    if(num[j-1]>num[j]){
     int temp = num[j];
     num[j] = num[j-1];
     num[j-1] = temp;
    }
   }
  }
  return num;
 }

圖解以下: spa

排序一遍後變成 code

依次類推,效果猶如把最大數「冒」上去。
排序


須要注意的細節是,對於n個數據,只須要排n-1次,故控制排序遍數的i起始值爲1而不是0.在每次排序中,上次排好的數不須要再進行比較,故控制每次排序結束位置變了j的上限是num-i,隨着排序次數i增長,須要排序的位置越靠前。 class

2. 時間複雜度 效率

冒泡排序的主要時間消耗是比較,第一趟序比較n-1次,隨後依次遞減n-2....1,則總比較(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其時間複雜度爲O(n*2). im

3.空間複雜度 數據

整個排序過程須要一個temp的空間用於交換數據,故爲空間複雜度爲O(1).

相關文章
相關標籤/搜索