习题-纸牌排序

纸牌排序

在学习《算法》(第四版)时,碰到这么个纸牌系列的问题。

纸牌排序

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

这个问题实际上就是一次只能比较某两个元素而实现排序,回想排序算法,发现使用插入排序算法的思想和冒泡排序的思想是很可行的。

出列排序

说说你会如何将一副扑克牌排序,限制条件是只能查看最上面的两张牌,交换最上面的两张牌,或是将最上面的一张牌放到这一摞牌的最下面。

这个解决方法的思想呢,是借鉴选择排序算法的思想的,即每次选出该扑克牌中最大的那个牌出来。具体做法如下:

  1. 比较最上面的两张牌,如果第一张牌比第二张牌大,就交换这两张牌,否则保持这两张牌的顺序不变,然后再将第一张牌放入牌底,随着是同样的操作——比较最上面的两张牌。经过length-1次这样的操作后,最上面的牌肯定是最大的一张牌了,此时不需要做任何的比较,直接把此牌放入牌底。

  2. 第一步中已经找出了最大的一张牌并且放入了牌底,那么接下来还是同样的做法,就是在最上面的length-1张牌中,找出最大的一张牌,再放入排序,经过反复的这样操作后,可以实现有序,最大的牌在最上面,而最小的牌在最下面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值