zoukankan      html  css  js  c++  java
  • CS 61B homewok8

    测试结果:

    part one   对于mergesortQueue这个函数可以最开始用front返回item来比较。。。之前脑筋又短路了。。。搞得有点复杂

      public static LinkedQueue mergeSortedQueues(LinkedQueue q1, LinkedQueue q2) {
        // Replace the following line with your solution.
          LinkedQueue mergedQueue = new LinkedQueue();
          int flag = 0;
          Object q1item=0;
          Object q2item=0;
          try{
              while((!q1.isEmpty())&&(!q2.isEmpty())||((q1item!=null)&&(q2item!=null)&&flag==1)){
                  
                  if(flag==0){q1item = q1.dequeue();q2item = q2.dequeue();}
                  flag=1;
                  while(((Comparable)(q1item)).compareTo(((Comparable)(q2item)))>=0){
                      mergedQueue.enqueue(q2item);
                      if(!q2.isEmpty()){q2item=q2.dequeue();}else{q2item=null;break;}
                  }
                  while(q2item!=null&&((Comparable)(q1item)).compareTo(((Comparable)(q2item)))<0){
                      mergedQueue.enqueue(q1item);
                      if(!q1.isEmpty()){q1item=q1.dequeue();}else{q1item=null;break;}
                  }
              }
              if(flag==1){    //万一q1 q2是空的
              if(q1item!=null){mergedQueue.enqueue(q1item);}
              if(q2item!=null){mergedQueue.enqueue(q2item);}}
              if(!q2.isEmpty()){
                  mergedQueue.append(q2);              
              }else if(!q1.isEmpty()){
                  mergedQueue.append(q1);
              }
                                       
          }catch(QueueEmptyException e){ System.err.println("Error:  attempt to dequeue from empty queue.");}
        return mergedQueue;
      }
    mergeSortedQueues
      public static LinkedQueue makeQueueOfQueues(LinkedQueue q) {
        // Replace the following line with your solution.
          LinkedQueue QueueOfQueues = new LinkedQueue();
          try{
          while(!q.isEmpty()){
              Object OneQueue = q.dequeue();
              LinkedQueue OneLinkedqueue = new LinkedQueue();
              OneLinkedqueue.enqueue(OneQueue);
              QueueOfQueues.enqueue(OneLinkedqueue);
          }
          }catch(QueueEmptyException e){ System.err.println("Error:  attempt to dequeue from empty queue.");}
        return QueueOfQueues;
      }
    makeQueueOfQueues
      public static void mergeSort(LinkedQueue q) {
        // Your solution here.
          LinkedQueue Queues = makeQueueOfQueues(q);
          try{
          while(Queues.size()>1){
              Queues.enqueue(mergeSortedQueues((LinkedQueue)Queues.dequeue(),(LinkedQueue)Queues.dequeue()));
          }
          }catch(QueueEmptyException e){ System.err.println("Error:  attempt to dequeue from empty queue.");}
          q.append(Queues);
      }
    mergeSorted

    part two

      public static void quickSort(LinkedQueue q) {
        // Your solution here.
          if(!q.isEmpty()){
              int pivotnum = 1+(int)(Math.random()*q.size());
              Comparable pivot = (Comparable)q.nth(pivotnum);
              LinkedQueue qSmall = new LinkedQueue();
              LinkedQueue qLarge = new LinkedQueue();
              LinkedQueue qEquals= new LinkedQueue();
              partition(q,pivot,qSmall,qEquals,qLarge);
    //          if(!qSmall.isEmpty()){
              quickSort(qSmall);//}
    //          if(!qLarge.isEmpty()){
              quickSort(qLarge);//}
              q.append(qSmall);
              q.append(qEquals);
              q.append(qLarge);
          }    
                
      }
    quickSort
     public static void partition(LinkedQueue qIn, Comparable pivot, 
                                   LinkedQueue qSmall, LinkedQueue qEquals, 
                                   LinkedQueue qLarge) {
        // Your solution here.
          try{
          while(!qIn.isEmpty()){
              Object Item = qIn.dequeue();
              if(((Comparable)(Item)).compareTo(pivot)>0){
                  qLarge.enqueue(Item);
              }else if(((Comparable)(Item)).compareTo(pivot)<0){
                  qSmall.enqueue(Item);
              }else{
                  qEquals.enqueue(Item);
              }
          }
          }catch(QueueEmptyException e){ System.err.println("Error:  attempt to dequeue from empty queue.");}
      }
    partition

    part three 跑出来的答案不写了,结论是,quicksort比较快!!

    part four 按照我的代码 mergesort unstable/quicksort stable

    mergesort中,等于号放在第三个while中,mergesort会变成stable的。

    while((!q1.isEmpty())&&(!q2.isEmpty())||((q1item!=null)&&(q2item!=null)&&flag==1)){
                  
                  if(flag==0){q1item = q1.dequeue();q2item = q2.dequeue();}
                  flag=1;
                  while(((Comparable)(q1item)).compareTo(((Comparable)(q2item)))>=0){
                      mergedQueue.enqueue(q2item);
                      if(!q2.isEmpty()){q2item=q2.dequeue();}else{q2item=null;break;}
                  }
                  while(q2item!=null&&((Comparable)(q1item)).compareTo(((Comparable)(q2item)))<0){
                      mergedQueue.enqueue(q1item);
                      if(!q1.isEmpty()){q1item=q1.dequeue();}else{q1item=null;break;}
                  }
              }

    quicksort中,partition中依次dequeue决定了quicksort的stable性质。

    最近课上讲了好多新知识,留个坑,整理下笔记!

  • 相关阅读:
    httpd.conf详细解释
    centos 6 编译安装php-5.4/5.5(lamp模式)
    apache的动态和静态
    Apache Prefork、Worker和Event三种MPM分析
    如何使用apache的 work模式还是 prefork 模式
    apache的扩展模块安装
    apache 启动脚本加入系统服务列表
    MYSQL5.5源码安装 linux下
    LAMP第一部分-环境搭建
    I2C驱动详解
  • 原文地址:https://www.cnblogs.com/developerchen/p/7309639.html
Copyright © 2011-2022 走看看