话不多说,直接上代码
let cards=[1,2,7,8,9,0,6,3,7];let firstCard=cards[0];for(let i=1;i-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自然插入头的位置。