zoukankan      html  css  js  c++  java
  • 直接插入排序

    英勇青铜

    算法思路

    两个数组:待排序数组disorderArray和有序数组orderArray
    从待排序数组中取一个数disorderArray[i]
    依次和有序数组中每个数比较
    小于元素orderArray[j]
    先将位置j及之后的元素向后移动一位
    再插入到位置j
    一直都不小于,
    则直接插入到orderArray[orderArray.length]

    注意

    disorderArray[i]orderArray[j]比较时:
    从左向右,条件disorderArray[i]<orderArray[j]
    从右向左,条件disorderArray[i]>orderArray[j]
    如果加上等于,可以少比较一次,但是要多做一次移动

    算法实现

    function InsertSort(disorderArray) {
        var i, j, k;
        var orderArray = [];
        //第0个元素不用排序
        orderArray[0] = disorderArray[0];
        //从第1个元素开始,依次取出待排序数组中的元素
        for (i = 1; i < disorderArray.length; i++) {
            //依次和有序数组元素比较
            for (j = 0; j < orderArray.length; j++) {
                //小于等于元素,则找到了要插入的位置orserArray[j]
                if (disorderArray[i] < orderArray[j]) {
                    break;
                }
                //如果j == orderArray.length,那么disorderArray[i]是最大的
                //直接插入到j位置,不用再移动orderArray
            }
            //将位置j及之后的元素后移一位,j == orderArray.length时正好跳过循环
            for (k = orderArray.length; k > j; k--) {
                //有序数组会增1,从length+1开始从后向前到j插入到j+1
                orderArray[k] = orderArray[k - 1];
            }
            //插入到合适的位置
            orderArray[j] = disorderArray[i];
        }
        console.log(orderArray);
    }
    
    var disorderArray = [5, 3, 8, 1, 6, 4];
    InsertSort(disorderArray);
    

    不屈白银

    算法思路

    一个数组:orderArray
    首先将 orderArray[0] 看成有序数组
    然后从 orderArray[1] 开始插入到有序数组中
    目标就是将待排部分全部插入到有序部分

    算法实现

    function InsertSort(orderArray) {
        //辅助交换
        var temp;
        //依次取出待排序部分的元素orderArray[i],从1开始
        for (var i = 1; i < orderArray.length; i++) {
            //待排部分和有序部分从右向左进行比较
            for (var j = i - 1; j >= 0; j--) {
                //待排元素大于则插入,找到要插入的位置j+1
                if (orderArray[i] >= orderArray[j]) {
                    break;
                }
            }
            temp = orderArray[i];
            //待排元素位置到插入位置之间的元素需要移动
            for (i; i > j + 1; i--) {
                orderArray[i] = orderArray[i - 1];
            }
            orderArray[j + 1] = temp;
        }
    }
    
    var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8]
    InsertSort(orderArray);
    console.log(orderArray);
    

    荣耀黄金

    算法思路

    待排部分和有序部分比较时
    若待排元素小于有序元素,则将有序元素后移
    若待排元素大于等于有序元素,则待排元素位置确定,插入该位置
    跳出此次循环
    目标任然是将待排元素插入到有序部分

    注意

    比较条件写到for循环中

    function InsertSort(orderArray) {
        //辅助交换
        var temp;
        //依次取出待排序部分的元素orderArray[i],从1开始
        for (var i = 1; i < orderArray.length; i++) {
            temp = orderArray[i];
            //待排部分和有序部分从右向左进行比较
            for (var j = i - 1; j >= 0 && temp < orderArray[j]; j--) {
                //待排元素小于则后移
                orderArray[j + 1] = orderArray[j];
            }
            //待排元素插入
            orderArray[j + 1] = temp;
        }
    }
    
    var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8]
    InsertSort(orderArray);
    console.log(orderArray);
    

    华贵铂金

    算法思路

    待排部分和有序部分比较时
    若待排元素小于有序元素,则两者进行位置交换,继续比较
    若待排元素大于等于有序元素,则待排元素位置确定,跳出此次循环
    目标任然是将待排元素插入到有序部分

    注意

    每次只是进行两个元素的比较
    其中一个是待排元素
    这种方式可能不是直接插入排序

    算法实现

    function InsertSort(orderArray) {
        //辅助交换
        var temp;
        //依次取出待排序部分的元素orderArray[i],从1开始
        for (var i = 1; i < orderArray.length; i++) {
            temp = orderArray[i];
            //待排部分和有序部分从右向左进行比较
            for (var j = i - 1; j >= 0; j--) {
                //待排元素小于则交换位置
                if (temp < orderArray[j]) {
                    orderArray[j + 1] = orderArray[j];
                    orderArray[j] = temp;
                } else {
                    break;
                }
            }
        }
    }
    
    var orderArray = [9, 3, 7, 1, 4, 2, 5, 0, 6, 8]
    InsertSort(orderArray);
    console.log(orderArray);
    
  • 相关阅读:
    [UVA1149]Dominating Patterns
    [HDOJ1358]Period
    [HDOJ3065]病毒侵袭持续中
    【RQNOJ356】myt的格斗
    【rqnoj39】 饮食问题
    【rqnoj28】[Stupid]愚蠢的宠物
    【rqnoj378】 约会计划
    layer弹框在实际项目中的一些应用
    layer弹框在实际项目中的一些应用
    移动开发之css3实现背景几种渐变效果
  • 原文地址:https://www.cnblogs.com/-beauTiFul/p/9342035.html
Copyright © 2011-2022 走看看