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