1. 程式人生 > >冒泡,選擇和插入排序比較

冒泡,選擇和插入排序比較


/**
 * 氣泡排序,兩層巢狀迴圈,內層區域性比較後,找出最大或者最小資料並交換資料,使其區域性有序,外層用於比較剩餘元素,相較於選擇排序,選擇排序相當於是冒泡的一個優化版本(減少了交換次數)
  */
    public static void buble_sort() {
        int [] arr = {1,12,2,3,1,25,3,87,45,32,90,0,1,12,2,3,1,25,3,87,45,32,90};

        for(int i=0;i < arr.length; i++) {
            for (int j=i+1; j < arr.length; j++) {
                if(arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        for(int i : arr) {
            System.out.println(i);
        }
    }

    /**
     * 插入排序,核心思想是左邊的資料已經假設全部有序,取出右邊的資料,經過比較後插入到左邊。
     */
    public static void insert_sort() {
        int [] arr = {1,12,2,3,1,25,3,87,45,32,90,0,1,12,2,3,1,25,3,87,45,32,90};
        for(int i=0; i< arr.length;i++) {
            for(int j=i; j>0 && arr[j] < arr[j-1]; j--) {
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }

        for (int i : arr) {
            System.out.println(i);
        }
    }

    /**
     * 選擇排序,兩層巢狀迴圈,內層根據索引排序得到最大或最小值,外層交換。
     */
    public static void select_sort() {
        int [] arr = {12,2,3,1,25,3,87,45,32,90,0,1,12,2,3,1,205,3,87,45,32,90,1,12,2,3,1,25,3,87,45,32,90,0,1,12,2,3,1,25,3,87,45,32,90};
        for(int i=0; i<arr.length; i++) {
            int min = i;
            for(int j=i+1; j<arr.length; j++) {
                if(arr[min] > arr[j]) {
                    min = j;
                }
            }
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }

        for (int i : arr) {
            System.out.println(i);
        }
    }`