算法大神之路----排序(冒泡排序法)
阿新 • • 發佈:2017-08-11
border port 情況 ott 最大 交換 length n-1 next
冒泡排序法
冒泡排序法又稱為交換排序法,是由觀察水中冒泡變化構思而成,氣泡隨著水深壓力而改變.氣泡在水底時,水壓最大,氣泡最小,而氣泡慢慢浮上水面時,氣泡所受壓力最小,體積慢慢變大.
冒泡排序比較方式是從第一個元素開始,比較相鄰的元素大小,如果大小順序有誤,則對調後進行下一個元素比較.直到所有元素滿足關系為止.
冒泡排序法分析
- 冒泡排序法平均情況下,需要比較(n-1)/2次,時間復雜度為O(n2),最好的情況只需要掃描一次,不用操作,即作n-1次比較,時間復雜度為O(n).
- 由於冒泡排序為相鄰兩者相互比較對調,並不會改變其原本排列的順序,所以是穩定的排序法
- 只需要一個額外的空間,所以空間復雜度最佳
- 這個排序法適用於數據量小,或者有部分數據已經排序過的情況
代碼示例:
import java.util.Random; /** * 算法大神之路----排序(冒泡排序法) */ public class Study01 { public static void main(String[] args) { //新建一個數組 int[] arr = new int[6]; Random r = new Random(); for (int i = 0; i < arr.length; i++) { //使用隨機數給數組賦值arr[i] = r.nextInt(50); } System.out.print("原數組為:"); paint(arr); System.out.println("-----排序-----"); //使用冒泡排序法進行排序,最差情況下 for (int i = arr.length-1; i >=0; i--) { //比較當前數和後一個數,誰大,誰放後面 for (int j = 0; j < i; j++) {if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } System.out.print("掃描第"+(arr.length-i)+"次結果為:"); paint(arr); } } public static void paint(int[] arr){ for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+"\t"); } System.out.println(); } }
結果:
原數組為:34 41 24 36 15 21 -----排序----- 掃描第1次結果為:34 24 36 15 21 41 掃描第2次結果為:24 34 15 21 36 41 掃描第3次結果為:24 15 21 34 36 41 掃描第4次結果為:15 21 24 34 36 41 掃描第5次結果為:15 21 24 34 36 41 掃描第6次結果為:15 21 24 34 36 41
可見:
- 第一次掃描時候,把第二個數41一直比較到後面去了
- 第二次掃描則是比較了,把36放到倒數第二個數
- ...
- 最後當第四次掃描的時候,已經排好序.最差情況下需要掃描"數組元素"次,一般,想要優化的話,即在程序中設置,當掃描到已經符合要求後,就直接停止掃描即可
算法大神之路----排序(冒泡排序法)