冒泡排序和選擇排序--Java

冒泡排序(Bubble sort)和選擇排序(Selection sort)算法

 

  初看冒泡排序和選擇排序不由會問它們有什麼區別? 的確, 它們的基本思想是同樣的. 都是經過一輪的循環找到所要排序數中的最值(最大值或最小值), 而後將最值置於頂端. 它們的區別主要體如今對其餘數(非最值)的處理上. code

  冒泡排序: 經過相鄰的兩個數的比較, 根據須要決定是否將兩個數互換位置, 而後將比較往前(或日後)推動. 例如, 要求從小到大排序. 經過將兩個數比較, 將較大的數置換到右邊. 如此不斷循環將獲得最值.blog

  選擇排序: 和冒泡排序不一樣, 選擇排序使用標記最值所在位置的方式, 查找最值過程當中不移動數位置, 只是在最後將最值置換到頂端.排序

  冒泡排序代碼:it

 1  public void bubbleSort(int []a){
 2            int len=a.length;
 3            for(int i=0;i<len;i++){
 4                for(int j=0;j<len-i-1;j++){//注意第二重循環的條件
 5                    if(a[j]>a[j+1]){
 6                        int temp=a[j];
 7                        a[j]=a[j+1];
 8                        a[j+1]=temp;
 9                    }
10                }
11            }
12        }

 

  選擇排序代碼:io

 1 public void selectSort(int[]a){
 2         int len=a.length;
 3         for(int i=0;i<len;i++){//循環次數
 4             int value=a[i];
 5             int position=i;
 6             for(int j=i+1;j<len;j++){//找到最小的值和位置
 7                 if(a[j]<value){
 8                     value=a[j];
 9                     position=j;
10                 }
11             }
12             a[position]=a[i];//進行交換
13             a[i]=value;
14         }
15     }

 

  從上兩段代碼能夠看出,它們處於同一個數量級,即時間複雜度是相同的,都用了兩層循環,爲O(n^2)(n:排序個數); 可是內層循環中,冒泡排序的互換位置的操做從機率上講要明顯多於選擇排序. 整個排序算法,選擇排序換位操做爲O(n),二冒泡排序爲O(n^2/2). 因此綜合來說選擇排序的時間效率要高於冒泡排序.class

相關文章
相關標籤/搜索