左手

算法初步-插入排序

萝らか妹 提交于 2020-02-08 17:39:58
1 描述 插入算法是生活中比较常用的算法,这个算法可以说所有人都用过,连小学生都会。只不过你平时用的时候没有意识到这个算法罢了。 比如说斗地主,这个大家都玩过吧。这个抓牌的过程其实就是一种插入排序的实现。 (当然可能略有些不同,斗地主是三个人抓牌,换排序肯可能就是你一个人抓一堆牌了)。 2 场景 首先来设定一个抓牌的场景,我们用1代表A,11代替J,13代替K。很明显,牌堆里面都是未排好序的,而抓牌后在你左手中的都是排序好的牌。 所以当前牌堆里面的牌是 左手:[] 牌堆:[3, 5, 1, 7, 6, 2, 11, 13, 4]。 ok,下面摸第一张牌,是一张3,放到左手,第一张牌本来就是排序好的,所以不用动了。 左手: [3] 牌堆:[5, 1, 7, 6, 2, 11, 13, 4] 继续摸第二张,右手抓了个5,还是比3大,直接放到3后面。 左手: [3,5] 牌堆:[1, 7, 6, 2, 11, 13, 4] 继续摸第二张,右手抓了个A,明显比3和5小需要排到3和5前面去,因此将3和5往右移一位,给A空出位置。然后将A插入大牌左手的牌堆空出的位置里。 左手: [空位,3 ,5] 牌堆:[ 7, 6, 2, 11, 13, 4] 右手[1] 左手: [1,3,5] 牌堆:[7, 6, 2, 11, 13, 4] 然后继续从牌堆里面拿牌,知道牌堆里面所有的牌都抓到左手中。 左手