zoukankan      html  css  js  c++  java
  • 排序算法——二分插入排序

    思路

    二分插入排序是插入排序的改进版,思路如下:

    ① 取数组的第一个元素认为已经排好序了

    ② 依次遍历数组中的元素,每次遍历过程中用二分查找找到已排序数组中,最后一个大于当前被遍历元素的位置

    ③ 将当前元素插入②找到的位置

    ④ 遍历完成后排序完成

    前置技能

    二分查找

    在一个有序数组arr中寻找一个数的位置。

    ① 定义一个索引 left=0,right=arr.length-1 ,mid=(left+right)/2向下取整

    ② 若target>arr[mid] ,则left=mid+1,若target<arr[mid],则right=mid-1,若target==arr[mid] ,则查找结束

    ③ 递归执行② ,执行完后返回-1,表示没找到

    javascript实现如下:

    function binarySearh(arr,target){
        if(!(arr instanceof Array) || !arr.length) return -1;
        var left=0,
            right=arr.length-1,
            mid;
        while(left<=right){
            mid=Math.floor((left+right)/2);
            if(target<arr[mid]){
                right=mid-1;
            }
            else if(target>arr[mid]){
                left=mid+1;
            }
            else{
                return mid;
            }
        }
        return -1;
    }

    javascript实现

    function binarySearchInsertionSort(arr){
        if(!(arr instanceof Array)) return [];
        if(arr.length<=1) return arr;
        // cur 当前处理的数字   left、right二分查找第一个>=当前元素的位置的index,查找区间的左右index,中间index
        var i,cur,left,right,mid;
        for(i=1;i<arr.length;i++){
            left=0;
            right=i-1;
            cur=arr[i];
            //用二分查找找到第一个大于当前元素的索引
            while(left<=right){
                mid=Math.floor((left+right)/2);
                if(cur<arr[mid]){
                    right=mid-1;
                }
                else{
                    left=mid+1;
                }
            }
            //插入元素
            arr.splice(left,0,arr.splice(i,1)[0]);
        }
        return arr;
    }
  • 相关阅读:
    thinkphp分页样式css代码
    thinkphp两表,多表联合查询及分页的连贯操作写法
    ThinkPHP3.2.3新特性之:数据库设置
    ThinkPHP的主从数据库配置
    CentOS7 64位下MySQL5.7安装与配置(YUM)
    sessionid如何产生?由谁产生?保存在哪里?
    GIT使用
    Windows下安装composer
    树莓派debian配置lamp[解决Apache不显示php网页]
    【Linux】Debian 下安装 Apache,MySQL,PHP
  • 原文地址:https://www.cnblogs.com/tzyy/p/4871986.html
Copyright © 2011-2022 走看看