我经常需要整理一些卡牌。这些是编号为1到216的“收藏家”卡牌,其中有重复和缺失的数字。
我正在寻找适用于物理卡牌的排序算法。插入排序似乎很好,因为插入卡牌不需要像在计算机内存中那样移动后续的卡牌。然而,浏览大量卡牌耗时。对于大堆卡牌,甚至有可能掉落卡牌,并且必须重新开始排序。
我可以在一个大桌子上画出卡牌,并直接将每张卡牌放到其正确的位置,但这需要相当大的空间,而且不是非常方便。
我的常规方法是首先浏览整个卡牌堆,并将它们放入1-49、50-99、100-149、150-199、200+的堆栈中。然后我扫描每个堆栈,并将它们放入0、1、2、3、4的堆栈中。最后,我对每个10个卡牌组合应用插入排序。尽管如此,这仍然是一个繁琐的过程。
另一个想法是将50个堆栈粗略地排序。25个将围绕中间,40个将在堆栈的末尾附近等等。这很快就可以带来一个大致排序的50卡牌堆,我可以轻松浏览并修复排序。
我想知道是否有更复杂的算法可以方便地应用于物理卡牌。我不知道怎么使用快速排序,类似堆排序的算法需要知道卡牌在卡牌堆中的索引。