常见排序算法-----二分插入排序

    // 二分插入排序
    // 分类 -------------- 内部比较排序
    // 数据结构 ---------- 数组
    // 最差时间复杂度 ---- O(n^2)
    // 最优时间复杂度 ---- O(nlogn)
    // 平均时间复杂度 ---- O(n^2)
    // 所需辅助空间 ------ O(1)
    // 稳定性 ------------ 稳定
    public void insertionSortDichotomySolution(int[] arr) {
        // 假设左边从0到i-1都已排好序

        for (int i = 1; i < arr.length; i++) {
            int current = arr[i];
            int left = 0;
            int right = i - 1;
            int mid = (left + right) >> 1;
            while (left <= right) {
                if (arr[mid] > current) {
                    right = mid - 1;
                } else{
                    left = mid + 1;
                } 
                mid = (left + right) >> 1;
            }

            for (int j = i - 1; j >= left; j--) {
                arr[j + 1] = arr[j];
            }
            arr[left] = current;
        }

    }
原文地址:https://www.cnblogs.com/maxbolg/p/9319672.html