思想
在直接插入排序的基础上,在插入的时候运用了折半查找法查找要插入的位置,再进行插入。

理解思路的视频
https://www.bilibili.com/video/av38482403


代码实现

function binsertSort(arr) {
    var low, high, j, temp;
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] < arr[i - 1]) {
            temp = arr[i];
            low = 0;
            high = i - 1;
            while (low <= high) {
                mid = Math.floor((low + high) / 2);
                if (temp > arr[mid]) {
                    low = mid + 1;
                } else {
                    high = mid - 1;
                }
            }
            for (j = i; j > low; --j) {
                arr[j] = arr[j - 1];
            }
            arr[j] = temp;
        }
    }
}

复杂度分析,两种插入排序对比
因为折半查找比顺序查找要快,所以折半插入排序比直接插入排序要快
最好的情况:本身已经有序,则为O(n)
最坏的情况:逆序,O(n^2)
平均:O(n^2)

折半插入排序和直接插入排序相同点是:元素移动次数不变,不同点是:元素比较次数不同
常见的排序算法----折半插入排序(插入排序类,JavaScript实现)

相关文章: