首先先貼出冒泡排序的算法原理(來自百度百科):算法
冒泡排序算法的原理以下:數組
比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。app
對每一對相鄰元素作一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。spa
針對全部的元素重複以上的步驟,除了最後一個。code
持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。排序
下面貼出兩端代碼,都是常見的冒泡排序:索引
第一種:ip
打印結果爲:element
能夠看到這種方法輪次數爲4次,比較次數也在遞減。get
第二種:
打印結果爲:
能夠看到這種方式輪次數爲5次,而且每次都會有4次的比較。
這兩種方式均可以完成冒泡排序,可是第一種明顯優於第二種,緣由就是第一種的時間上明顯縮短。
其次經過分析也可得知,冒泡排序作爲一個簡單的算法也有着優劣,
第一種方法:
$j<$len-$i
的由來,這個表達式是經過數組總長減去當前輪次數得出需比較次數,同時 $j=0; 確保所取得兩個數字從數組第一個也就是最小那個開始
第二輪比較結束後獲得第二大的數字,因此第三輪比較就能夠不去比較最後兩個
再此過程中的疑問:
(1)爲何 $i=1 ,這樣設置的意義是什麼?
答:好比一個數組長度爲5 ,每次比較得出一個最大值,那麼當比較4次以後就獲得了最大的4個數字,剩下的那個再也不去比較也可知道是最小數。
(2)$j<$len-$i ; 這樣不會有問題嗎?
答:不會,就如上面所說,當我第一次取得最大數後,以後比較時我就已經得知最後一位是最大,不去比較也能夠,而索引數組取值是從 $arr[0] 開始的。