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

算法-排序之冒泡排序

      
         如果數據按照一定的順序進行排序,數據處理的效率將顯著的提高。算法是編程的精髓,一個高效而合適的算法能極大的減少時間消耗與空間消耗,提到“合適”是因爲沒有哪個算法可以在所有情況下都表現出色,同樣是排序,在不同數據規模下各種排序算法有不同的效能表現,選擇合適的解決算法的才能最大限度地提高效率。
         1.冒泡算法BubbleSort是常用排序算法之一,它的核心是讓大(或小)的數據像水泡一樣冒到最上端,這是通過不斷地比較兩個相鄰數據的大小,前者大於後者則交換位置來實現冒泡。
          如下示例:
          
          圖解如下:
                                            排序一遍後變成   
                                     依次類推,效果猶如把最大數“冒”上去。

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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
void BubbleSort(int Array[],int num){
int i; //i控制排序的遍數
int j; //j控制每次排序結束的位置
int temp;
for(i=0;i<num;i++){
for(j=1;j<num-i;j++){
if(Array[j-1]>Array[j]){
temp=Array[j-1];
Array[j-1]=Array[j];
Array[j]=temp;
}
}
}
}
 來自CODE的代碼片
BuBBleSort.c
 

              2. 時間複雜度
           冒泡排序的主要時間消耗是比較,第一趟序比較n-1次,隨後依次遞減n-2....1,則總比較(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其時間複雜度爲O(n*2).
           3.空間複雜度
           整個排序過程需要一個temp的空間用於交換數據,故爲空間複雜度爲O(1).
           
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章