楼主: 逃亡~
跳转到指定楼层
上一主题 下一主题
收起左侧

Berkeley CS 61B Homework8

 
🔗
shendezhuti 2019-5-23 19:39:38 | 只看该作者
全局:
shendezhuti 发表于 2019-5-23 19:36
本次作业整体还是比较简单的,(不过我还是参考了一下别人的clean code)大概是因为这个quicksort不是老师 ...

merge sort is not stable,因为q1 q2的顺序会影响相同key的顺序
而quick sort is stable,因为这是一种类似自顶向下的排序,有一个equal的queue在!
回复

使用道具 举报

🔗
lesliere 2019-7-1 23:15:28 | 只看该作者
全局:
本帖最后由 lesliere 于 2019-7-1 23:20 编辑

1. 开始在makeQueueOfQueues()我用了递归的做法,结果就是到10000个的时候就溢出了,不知道是自己的算法的问题还是这就是递归本身会存在的问题(这种会递归很多次的就是该避免用递归的方法?
2. 就在quicksort中,我开始分case的时候用的是if和else if结果在这里找了好久的bug。。。
3.另外我我觉得我写的的mergesort还是stable。。。然后自己按照看到的同学的思路写了一个testcase感觉还是stable(当然很可能是一个testcase不够),总之不太理解那个造成stable的原因,好想知道大家不stable的实现和我是哪里不同。。。贴一下我写的:
  1. public static LinkedQueue mergeSortedQueues(LinkedQueue q1, LinkedQueue q2) {
  2.     // Replace the following line with your solution.
  3.     LinkedQueue newQueue = new LinkedQueue();
  4.     Comparable front1, front2;
  5.     while(q1.size()!=0||q2.size()!=0){
  6.       try{
  7.         front1 = (Comparable)q1.front();
  8.       }catch (QueueEmptyException e) {
  9.         System.out.println("EMPTY QUEUE!");
  10.         front1 = null;
  11.       }

  12.       try{
  13.         front2 = (Comparable)q2.front();
  14.       }catch (QueueEmptyException e) {
  15.         System.out.println("EMPTY QUEUE!");
  16.         front2 = null;
  17.       }

  18.       if (front2==null) {
  19.         newQueue.enqueue(front1);
  20.         try{
  21.           q1.dequeue();
  22.         }catch (QueueEmptyException e) {
  23.           System.out.println("EMPTY QUEUE!");
  24.         }
  25.       }else if(front1==null){
  26.         newQueue.enqueue(front2);
  27.         try{
  28.           q2.dequeue();
  29.         }catch (QueueEmptyException e) {
  30.           System.out.println("EMPTY QUEUE!");
  31.         }
  32.       }else if (front1.compareTo(front2)<=0) {
  33.         newQueue.enqueue(front1);
  34.         try{
  35.           q1.dequeue();
  36.         }catch (QueueEmptyException e) {
  37.           System.out.println("EMPTY QUEUE!");
  38.         }
  39.       }else{
  40.         newQueue.enqueue(front2);
  41.         try{
  42.           q2.dequeue();
  43.         }catch (QueueEmptyException e) {
  44.           System.out.println("EMPTY QUEUE!");
  45.         }
  46.       }
  47.     }
  48.    
  49.     return newQueue;
  50.   }
复制代码

更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
Alansong641 2020-2-10 02:03:53 | 只看该作者
全局:
附上截图:


跟着readme做就可以了,明白每个method是什么才行。没什么新的知识点。
主要是while和if判断那里有问题,debug了很久,时间花费性价比很低,标明了学习一下。
学习到了以后输出有误,但是没有报错,不如重写if,while,for等语句,重新规划逻辑,使其更精简一些。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表