Algs4-2.1.13纸牌排序-按花色排序

2.1.13纸牌排序。说说你会如何将一副扑克牌按花色排序(花色顺序是黑桃、红桃、梅花和方片),限制条件是所有牌都是背面朝上排成一列,而你一次只能翻看两张牌或者交换两张牌(保持背面朝上)。

算法具体描述如下:
1)翻看第一张、第二张牌
2)如果第二张牌的花色小于第一张牌的花色,那么交换这两张牌
3)翻看第一张、第三张牌
4)如果第三张牌的花色小于第一张牌的花色,那么交换这两张牌,如此反复直到翻看第一张牌和第52张牌
5)翻看第二张牌和第三张牌,第三张花色小于第二张时交换这两张牌,接着翻看第二张和第四张牌,如此反复直到翻看第二张牌和最后一张牌
6)如此反复直到翻看第39张和第40张牌,如果第40张花色小于第39张,那么交换这两张牌。此时所有花色已完成排序。(13张X3种花色=39张,这39张已有序,剩下的13张就是同一种花色了)

算法可再改进部分:
为减少翻看的次数,又由于只有4种牌色,那么翻看两张牌时,如果第一张翻看牌的花色是余下牌的最小花色,那么不需要反复翻看这张牌和其后的所有牌,直接翻看其后的两张牌。余下牌的最小花色的快整判断规则是:
令52张牌的52个位置为1至52,由鸽巢原理得出
当翻看的第一张牌的位置是1至13时,最小花色是黑桃。
当翻看的第一张牌的位置是14至26时,最小花色是红桃。
当翻看的第一张牌的位置是27至39时,最小花色是梅花。
当翻看的第一张牌的位置是40至52时,最小花色是方片

转载于:https://www.cnblogs.com/longjin2018/p/9860023.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值