zoukankan      html  css  js  c++  java
  • 算法 之 插入排序 的 JS 实现

    话不多说,直接上代码

    let cards=[1,2,7,8,9,0,6,3,7];
    
    let firstCard=cards[0];
    
    for(let i=1;i<cards.length;i++){
    
        let currentCard=cards[i];
    
        let j=i-1;
    
        while(j>-1&&cards[j]>currentCard){
    
            cards[j+1]=cards[j];
    
            j--;
        }
    
        cards[j+1]=currentCard;
    
    }
    
    console.log(cards);

    node运行输出结果:
    这里写图片描述

    对于插入排序的理解,可以想象为打扑克发牌时,玩家边得到牌边对手中牌插入排序的过程。
    以上边的程序来讲解:
    cards就是一堆牌(cards),玩家被发一张牌(currentCard),玩家手中持有的已排好顺序牌(cards[0-j]),let firstCard=cards[0];相当于玩家得到了第一张牌。for(let i=1;i<cards.length;i++)就像从第二张发牌到牌发完。while(j>-1&&cards[j]>currentCard)就是对手中以排好序的牌从右至左与刚得到的牌进行插入判断的过程。当手中有牌(cards[j])大于刚得到的牌(currentCard)就要将cards[j]往后挪一位cards[j+1]=cards[j];但此时还不应插入,因为插入的条件还需要手中的前一个牌j--;cards[j]小于currentCard,也就不满足cards[j]>currentCard自然弹出了循环,在此时,我们就可以将currentCard插入挪位得到的空位cards[j+1]=currentCard;当手中牌都大于currentCard也就是j>-1不满足的情况,手中所有牌依次向后挪一个位置,currentCard自然插入头的位置。

  • 相关阅读:
    CodeForces 543d Road Improvement
    UVA Foreign Exchange
    ZOJ 1825 Compound Words
    UVA 10125 Sumsets
    CodeForces
    32位linux(centos)下mongoDB的安装
    关于PHP 采集类
    关于微信支付零时工代码的修正方法
    微信公众号申请,微信支付全攻略 2
    简介CentOS与 Ubuntu的不同
  • 原文地址:https://www.cnblogs.com/dbdb/p/7695050.html
Copyright © 2011-2022 走看看