zoukankan      html  css  js  c++  java
  • Algs4-2.2.22三向归并排序

    2.2.22三向归并排序。假设每次我们是把数组分成三个部分而不是两个部分并将它们分别排序,然后进行三向归并。这种算法的运行时间的增长数量级是多少?
    运算时间增长数量级是O(Nlg3N)。
    public class E2d2d22
    {
        public static void sort(Comparable[] a)
        {
            Comparable[] aux=new Comparable[a.length];
            sort(a,aux,0,a.length-1);
       }
       
        private static void sort(Comparable[] a,Comparable[] aux,int lo,int hi)
        {
             if (hi<=lo)    return ;
              int m1=lo+(hi-lo)/3;
              int m2=m1+1+(hi-m1-1)/2;
              sort(a,aux,lo,m1);
              sort(a,aux,m1+1,m2);
              sort(a,aux,m2+1,hi);
              merge(a,aux,lo,m1,m2,hi);
        }
       
        private static void merge(Comparable[] a,Comparable[] aux,int lo,int m1,int m2,int hi)
        {
          for(int k=lo;k<=hi;k++)
              aux[k]=a[k];
          //
          int aIndex=lo;
          int bIndex=m1+1;
          int cIndex=m2+1;
         
          Comparable A,B,C;
          Double maxValue=Double.MAX_VALUE;
          for(int k=lo;k<=hi;k++)
          {
               if (aIndex<=m1) A=aux[aIndex]; else A=maxValue;
               if (bIndex<=m2) B=aux[bIndex]; else B=maxValue;
               if (cIndex<=hi)   C=aux[cIndex]; else C=maxValue;
               //
               if(less(A,B) && less(A,C))
                 {a[k]=A;aIndex++;}
               else if(less(B,A) && less(B,C))
                 {a[k]=B;bIndex++;}
               else if(less(C,A) && less(C,B))
                 {a[k]=C;cIndex++;}
               else
                   {a[k]=A;aIndex++;}
          }
        }
     
        private static boolean less(Comparable v,Comparable w)
        { return v.compareTo(w)<0;}
       
        private static void exch(Comparable[] a,int i,int j)
        {
          Comparable t=a[i];
          a[i]=a[j];
          a[j]=t;
        }
      
     public static boolean isSorted(Comparable[] a)
        {
          for(int i=1;i<a.length;i++)
            if(less(a[i],a[i-1])) return false;
          return true;
        }
     
     public static void main(String[] args)
       {
         Integer N=Integer.parseInt(args[0]);
         Comparable[] a=new Comparable[N];
         for(int i=0;i<N;i++)
             a[i]=StdRandom.uniform();
        
         sort(a);
         StdOut.printf("%s",isSorted(a));
      }
    }

  • 相关阅读:
    10-JavaScript 条件语句
    9-JavaScript 比较
    8-JavaScript 运算符
    6-JavaScript 事件
    Sum Problem 重定向文件的使用
    Calculate A + B.
    Vue中computed的本质及与methods的区别
    外部文件使用django的models
    DjangoURL反向解析
    字符串格式化的方式
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860119.html
Copyright © 2011-2022 走看看