出列排序Java版
来源:互联网 发布:淘宝物流管理怎么设置 编辑:程序博客网 时间:2024/04/28 18:35
出列排序
Sedgewick 算法第四版
- 2.1.14题:出列排序
说说你会如何将一副扑克牌排序,限制条件是只能查看最上面的两张牌,交换最上面的两张牌,或是将最上面的一张牌放到这摞牌的最下面。
思路如下:
- 第一步:从牌堆上出一张牌first,在出一张牌second(即从队列中出右出两张牌),比较这两张牌的大小,将小的张放到左边(即牌底),大的那张命名为first。反复N-1次找到牌堆中最大的牌(first);将其放到牌底
- 第二步:第一步中已经找出了最大的一张牌,并且该牌在牌底最后一张。我们接着重复第一步,比较两张牌的步骤,经过N-2次这样的操作后,顶上的牌就变成了除了最大的那张牌以外最大的。所以先把第二张移到牌底,在第一张在放到牌底,所以最下面的两张是顺序的,
- 第三步:比较N-3次,和第二次一样,但放回复原次数2次,最后将最后那张再放进去
- 如此重复……..
package two;import one.Dequeue;/* * 出列排序 * * * 用双向队列模拟的 * * 假设左侧为牌底,即只能进行pushLeft()把牌放置牌底 * 假设右侧为牌堆顶,即只能进行popRight()取出牌 * */public class movequeue { public static void main(String[] args) throws Exception{ Dequeue<Integer> queue=new Dequeue<Integer>(); //设置牌堆 queue.pushLeft(1); queue.pushLeft(3); queue.pushLeft(5); queue.pushLeft(2); queue.pushLeft(4); queue.pushLeft(7); queue.pushLeft(6); queue.pushLeft(8); queue.pushLeft(10); queue.pushLeft(6); queue.pushLeft(8); queue.pushLeft(10); System.out.println("没有排好序的状态"); queue.print();//10 8 6 10 8 6 7 4 2 5 3 1 int N=queue.size(); for(int i=N;i>0;i--){ int j=i-1;//这轮需要比较的次数j次(第一次为N-1(即i-1)次) int k=N-i;//这轮要放k张已经排好序的牌到牌底去(复原) int first=queue.popRight();//先取出一张 while(j>0){ //需要比较j次找到最大的排,不是最大的统统放进牌堆 int second=queue.popRight(); if(first>second){ queue.pushLeft(second); } else{ queue.pushLeft(first); first=second; } j--; } while(k>0){ //复原原本就排好序的牌 int p=queue.popRight(); queue.pushLeft(p); k--; } queue.pushLeft(first);//将每轮比较中最大的排放到牌底 } System.out.println("排好序的"); queue.print();//1 2 3 4 5 6 6 7 8 8 10 10 }}
双向队列的链表版实现即(Dequeue.java)
阅读全文
0 0
- 出列排序Java版
- 出列排序
- 算法 第四版 2.1.14 出列排序
- java--报数出列问题
- 出列排序 《算法》2.1.14
- [J2SE]Java 逢三出列小程序
- 循环队列实现站圈出列(垃圾版)
- 【奇偶出列】
- 请你出列
- Java经典面试题(N人循环报M个数出列)实现
- 排队出列算法
- 【华为上机】数数出列
- 约瑟夫报数出列题
- 冒泡排序(java版)
- 快速排序(java版)
- 冒泡排序 JAVA版
- 冒泡排序(JAVA版)
- 排序小结(java版)
- Spring生命周期相关
- shadowsocks的搭建和多用户、流量配置工具的使用
- Java--集合
- Bike-sharing-demand
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- 出列排序Java版
- 你有几张「云」账单?
- javaScript函数探秘
- 比特币量化-EMA策略
- CC2640R2F BLE5.0 CC2640R2F Evaluation Board功耗测量
- 2017/8/14 离线赛
- 通过Configure ArcGIS Server Account修改密码提示”invalid password specified”
- ibatis传入数组或List类型参数小结
- js中的假值及==、===