1. 程式人生 > 其它 >簡單排序之 【插入排序 選擇排序 氣泡排序】

簡單排序之 【插入排序 選擇排序 氣泡排序】

package whale;


/**
 * @Author: WhaleFall541
 * @Date: 2021/4/4 16:08
 */
public class SimpleSort {

    public static void main(String[] args) throws InterruptedException {
        int[] arr = {-1, 20, -3, -10, 100, -255};
//        selectSort(arr);
//        bubble(arr);
        insertSort(arr);
        StringBuilder sb = new StringBuilder();
        for (int i : arr)
            sb.append(i).append(" ");
        System.out.println("sb = " + sb);

    }

    // 插入排序
    private static void insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            // 需要將i插入到前面子序列
            if (arr[i] < arr[i - 1]) {
                int k = arr[i], j;
                // i為要插入的元素,j為i往前的元素
                // 如果arr[j]比k大 則把arr[j]元素往後挪
                // 如果arr[j]比k小則直接插入元素在空位上
                for (j = i - 1; j >= 0 && arr[j] > k; j--)
                    arr[j + 1] = arr[j];
                // 將元素放到比k小的後面
                arr[j + 1] = k;
            }
        }
    }

    //選擇排序
    private static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int k = i;// i是要排序的數下標
            // 跟i下標後面的每個元素比較記錄下來arr[k]最小的k值
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[k] > arr[j])
                    k = j;
            }

            // 最小的arr[k] 和 當前排序位置arr[i]互換
            swap(arr, i, k);
        }
    }

    // 氣泡排序
    private static void bubble(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j])
                    swap(arr, i, j);
            }
        }

    }

    private static void swap(int[] arr, int a, int b) {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }

}