JAVA基礎--氣泡排序

月亮警察發表於2024-03-10

氣泡排序(筆試題)

  • 兩次迴圈,外層冒泡輪數,裡層依次比較

  • 時間複雜度為O(n2)

  • 過程:

  1. 比較陣列中兩個相鄰的元素,如果第一個元素比第二個大,則交換它們的位置
  2. 每一次比較都會產生一個最大或者最小的陣列,下一輪則可以少一個排序
  3. 依次迴圈,直到結束
public class BubbleSort {
    public static void main(String[] args) {
        //氣泡排序(升序:從小到大)
        int[] nums = {2,4,1,3,5,9,6,7};
        int temp = 0;//臨時變數,用於交換
        //輸出排序前陣列
        System.out.println("排序前陣列為:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
        //兩兩比較
        for (int i = 0; i < nums.length-1; i++) {
            for (int j = 0; j < nums.length-1; j++) {
                if(nums[j+1]<nums[j]){
                    //將比較小的數換到前面
                    temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                }
            }
        }
        //輸出排序後陣列
        System.out.println();//換行
        System.out.println("排序後陣列為:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
    }
}

執行結果為:

編寫一個氣泡排序的方法

import java.util.Arrays;
public class BubbleSort {
    public static void main(String[] args) {
        int[] nums = {2,4,1,3,5,9,6,7};
        int[] nums_2 = bubSort(nums);//呼叫方法
        //輸出排序後陣列
        System.out.println("排序後陣列為:");
        System.out.println(Arrays.toString(nums_2));
    }
    //氣泡排序的方法(升序)
    public static int[] bubSort(int[] arr){
        int temp = 0;
        //兩兩比較
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1; j++) {
                if(arr[j+1]<arr[j]){
                    //將比較小的數換到前面
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }
}

最佳化

減少比較次數

import java.util.Arrays;
public class BubbleSort {
    public static void main(String[] args) {
        int[] nums = {2,4,1,3,5,9,6,7};
        int[] nums_2 = bubSort(nums);
        //輸出排序後陣列
        System.out.println("排序後陣列為:");
        System.out.println(Arrays.toString(nums_2));
    }
    //氣泡排序的方法(升序)
    public static int[] bubSort(int[] arr){
        int temp = 0;
        //兩兩比較
        for (int i = 0; i < arr.length-1; i++) {
            boolean flag = false;//用於標記是否發生了交換
            for (int j = 0; j < arr.length-1; j++) {
                if(arr[j+1]<arr[j]){
                    //將比較小的數換到前面
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }
            if(flag == false){
                //如果沒有發生交換則表示已經排序完成,不需要再繼續迴圈比較
                break;
            }
        }
        return arr;
    }
}

相關文章