耐心排序是什么

本文探讨了耐心排序算法,它源于纸牌游戏并用于数组排序。通过建桶和特定的入桶规则,耐心排序能创建基本有序的序列,之后再用插入排序完成。同时,文章指出最长递增子序列问题可以通过耐心排序和二分查找来解决,当数字经过耐心排序后,最长递增子序列的长度等于桶的数量。
摘要由CSDN通过智能技术生成

前言

在刷算法小抄的时候,刷到动态规划这个内容,有一道题是最长递增子序列,一个很常规的做法是动态规划,dp[i]表示以i下标这个字符结尾的最长递增子序列的长度。
文章中还介绍了另一种做法,也即二分查找,正常人估计也不会想得到这道题会和二分扯上关系吧,书上说最长递增子序列和一种叫做 patience game 的纸牌游戏有关,甚至有一种排序方法就叫做 patience sorting(耐心排序)。这下我可傻眼了,因为学数据结构的时候也没看到过有耐心排序这个算法,在准备秋招的过程中也并没有了解到,于是我便带着“耐心排序是什么”这个疑问去求助度娘。

耐心排序

度娘对耐心排序的定义: 在计算机科学中,耐心排序(Patience Sort)是将数组的元素分类成很多堆再串接回数组的一种排序算法。受到纸牌游戏耐心的启发和命名。算法的变体有效地计算给定阵列中最长的增加子序列的长度。
小声bb:耐心排序还是对插入排序做的一种优化,先将数据调整为基本有序,再进行一次插入排序。而耐心排序的关键在于建桶和入桶规则上,建桶和入桶规则如下:
建桶规则:如果没有桶,新建一个桶;如果不符合入桶规则那么新建一个桶
入桶规则:只要比桶里最上边的数字小即可入桶,如果有多个桶可入,那么按照从左到右的顺序入桶即可

耐心排序是怎么排序的

这里我们举个例子:待排数组[6 4 5 1 8 7 2 3]
第一步,取数字6出来,此时一个桶没有,根据建桶规则1新建桶,将把自己放进去,为了表述方便该桶命名为桶1或者1号桶

第二步,取数字4出来,由于4符合桶1的入桶规则,所以入桶1,并放置在6上边,如下图2所示

第三步,取数字5出来,由于5不符合桶1的入桶规则,比桶1里最上边的数字大,此时又没有其它桶,那么根据建桶规则新建桶2,放入住该桶

第四步,取数字1出来,1即符合入1号桶的规则,比4小嘛,也符合入2号桶的规则,比5也小,两个都可以入,根据入桶规则1入住1号桶(实际入住2号桶也没关系)

第五步,取数字8出来,8比1号桶的掌门1大,比2号桶的掌门5也大,而且就这俩桶,所以8决定自立门派,建立了3号桶,并入住该桶成为首位掌门

第六步,取数字7出来,1号桶,2号桶的掌门都不行,最后被3号桶收服,投奔了3号桶的门下

第七步,取数字2出来,被2号桶掌门收了

第八步,取数字3出来,被3号桶的现任掌门7收了

全部入桶完毕…

图示如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值