Android 教你如何發現 APP 卡頓
阿新 • • 發佈:2020-11-01
氣泡排序(Bubble Sorting)的基本思想
通過對待排序序列從前向後(從下標較小的元素開始),依次比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向後部,就像水底下的氣泡一樣逐漸向上冒。
圖解:
小結:
(1) 一共進行(陣列的大小-1)次大的迴圈
(2)每一趟排序的次數在逐漸的減少
(3) 如果我們發現在某趟排序中,沒有發生一次交換, 可以提前結束氣泡排序。這個就是優化優化:
因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序,因此要在 排序過程中設定一個標誌 flag 判斷元素是否進行過交換。從而減少不必要的比較。
程式碼實現
//將五個無序的數:3,9,-1,10,-2使用氣泡排序法將其排成一個從小到大的有序數列。 1. publicclassbubblesort{ 2. publicstaticvoidmain(String[]args){ 3. int[]arr={3,9,-1,10,-2}; 4. System.out.println("原陣列為:"+Arrays.toString(arr)); 5. bubbleSort(arr); 6. System.out.println("排序後陣列為:"+Arrays.toString(arr)); 7. } 8. 9. //氣泡排序的時間複雜度O(n^2) 10. privatestaticvoidbubbleSort(int[]arr){ 11. inttemp=0;//臨時變數 12. for(inti=0;i<arr.length-1;i++){//第一層for表示幾趟 13. booleanflag=false;//標識變數,表示是否進行過交換(優化) 14. for(intj=0;j<arr.length-1-i;j++){//第二層for表示每一趟如何做 15. if(arr[j]>arr[j+1]){//如果前面的數比後面的數大,則交換 16. flag=true; 17. temp=arr[j]; 18. arr[j]=arr[j+1]; 19. arr[j+1]=temp;20. } 21. } 22. if(!flag){//在一趟排序中,一次交換都沒有發生過 23. break; 24. } 25. } 26. } 27. }