扑克牌的排序问题

import java.util.HashMap;

/**
 * Created by kisstheraik on 16/8/24.
 * Description 对扑克牌进行排序,Poker相当于一种字符串,但是两次的桶不一样,一次是13个一次是4个,需要进行两次桶排序
 */
public class PokerSort {

    static class Poker{
        String suit;
        String rank;
        
        public Poker(String suit,String rank){
            this.suit=suit;
            this.rank=rank;
        }
        public String toString(){
            return "["+suit+" "+rank+"]";
        }
        //处理桶的关系
        public int get(int index){

            HashMap<String,Integer> h=new HashMap<>();

            h.put("2",1);
            h.put("3",2);
            h.put("4",3);
            h.put("5",4);
            h.put("6",5);
            h.put("7",6);
            h.put("8",7);
            h.put("9",8);
            h.put("10",9);
            h.put("J",10);
            h.put("Q",11);
            h.put("K",12);
            h.put("A",13);
            h.put("♣",1);
            h.put("♦",2);
            h.put("♥",3);
            h.put("♠",4);

            if(index==0)
                return h.get(rank);
            else return h.get(suit);


        }

    }

    public static void main(String[] args){

        int NUM=30;
        Poker[] list={new Poker("♠","A"),new Poker("♥","2"),new Poker("♥","A"),new Poker("♥","3"),new Poker("♦","J"),new Poker("♦","A")};

        sort(list);

        for (Poker p:
             list) {
            System.out.print(p.toString()+" ");
        }
    }

    public static void sort(Poker [] list){


        int R=14;
        int length=list.length;
        Poker[] tmp=new Poker[length];
        for(int i=0;i<2;i++){
            //第一次循环,根据数字排序

            int[] count=new int[R+1];


            for(int j=0;j<length;j++)
                count[list[j].get(i)+1]++;

            for(int j=0;j<R;j++)
                count[j+1]+=count[j];

            for(int j=0;j<length;j++)
                tmp[count[list[j].get(i)]++]=list[j];

            for(int j=0;j<length;j++)
                list[j]=tmp[j];
        }

    }
}

 

转载于:https://my.oschina.net/lovezfy/blog/737438

### 扑克牌排序算法 扑克牌排序可以通过多种方法实现,其中一种常见的思路是利用字典映射来表示扑克牌的大小顺序,并基于此进行自定义排序。以下是具体的解决方案: #### 解决方案描述 为了实现扑克牌排序,可以按照以下逻辑编写代码: 1. 定义一张扑克牌的花色和数值对应的优先级表。 2. 将输入的扑克牌转换为可比较的形式(例如元组),并依据优先级表进行排序。 3. 输出排序后的结果。 下面是一个完整的 Python 实现示例: ```python def poker_sort(cards): # 定义花色和数值的优先级 suit_order = {'♠': 4, '♥': 3, '♦': 2, '♣': 1} # 黑桃 > 红心 > 方片 > 梅花 value_order = { 'A': 14, 'K': 13, 'Q': 12, 'J': 11, 'T': 10, '9': 9, '8': 8, '7': 7, '6': 6, '5': 5, '4': 4, '3': 3, '2': 2 } # 自定义排序键 def sort_key(card): value, suit = card[:-1], card[-1] return (suit_order[suit], value_order[value]) # 对扑克牌列表进行排序 sorted_cards = sorted(cards, key=sort_key, reverse=True) return sorted_cards # 测试用例 cards = ['2♠', 'A♣', 'K♥', 'Q♦', 'J♣'] sorted_result = poker_sort(cards) print(sorted_result) ``` 上述代码实现了扑克牌的降序排列,黑桃最高,梅花最低;同花色情况下,`A` 的权重最大,`2` 最小[^1]。 --- #### 关于离散化与排序的关系 在某些场景下,扑克牌排序也可以看作是一种 **数据有序化** 或者 **离散化** 的过程。通过将复杂的扑克牌信息转化为简单的整数序列来进行高效操作,这正是引用中提到的数据结构优化思想的一部分[^2]。 --- #### 输入输出示例 假设输入如下一组扑克牌: ```plaintext ['2♠', 'A♣', 'K♥', 'Q♦', 'J♣'] ``` 运行以上代码后,输出的结果将是: ```plaintext ['A♣', 'K♥', 'Q♦', 'J♣', '2♠'] ``` --- #### 性能分析 该算法的时间复杂度主要由 `sorted()` 函数决定,其时间复杂度为 \(O(n \log n)\),适用于大多数实际应用场景。对于大规模数据集,还可以考虑进一步优化排序策略或者采用其他高级数据结构[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值