52张扑克牌排序算法

来源:互联网 发布:苹果内购 java服务端 编辑:程序博客网 时间:2024/04/30 17:14

算法要求:

  1. 生成一副扑克牌,并打乱顺序
  2. 对乱序的扑克牌文件进行排序

为了方便阅读,我们直接将扑克牌生成为人工可以识别的字符串,数字从2,3,4,5,6,7,8,9,10,J,Q,K,A,花式为♠,♣,♥,♦。代码如下:

 

上述算法中,首先生成一个顺序的扑克牌,再对扑克牌进行一个打乱——100次,随机两个扑克位置进行交换。注意:生成一副乱序的扑克牌算法有很多种,笔者可以想到的另外两种办法:直接生成一个乱序的序列,然后将此序列写入文件,请参照附注代码A;另一个方法是:生成一个顺序的序列,然后用随机算法写入文件,个人觉得这种算法最快,请参照附注代码B。

 

最后将生成好的扑克牌保存在文件Poker.txt中。然后针对这个文件进行排序:

 

 

以上的方法主要包括3个主要过程:

  1. 将扑克牌全部读取到列表list中。
  2. 对list进行排序。
  3. 将排序后的list写入新文件中。

在以上代码中包含一个神奇数字“100”,这个100的用途在于区分数字和花式的权重,玩过扑克的同学都知道,扑克牌的比较首先应该比较数字,在数字相同的情况下,再进行花式比较。这个地方的100实际上可以是任何大于等于4的数字,这个例子中只是为了Debug方便,所以将数字设置100,方便Debug而已,并无他意。另外一个神奇数字“15”,这个数字的用途是因为我们排序是从大到小进行排序,数字越大的顺序越前,所以在这个地方用15进去实际的数字再进行进行。

 

运行结果:Poker.txt文件

 

SortedPoker.txt文件

 

附注代码A:在写这快代码的时候遇到一个小问题值得注意,Next(min, max)中的min是可以包含的,但是max是不会包含的;例如Next(0, 15),那么最小返回0,最大返回15-1=14。

 

 

附注代码B:(推荐最佳算法)

 

原创粉丝点击