首页 > 编程语言 > 详细

s5 归并排序

时间:2020-04-28 18:03:30      阅读:65      评论:0      收藏:0      [点我收藏+]

一:解题思路

Time:O(n*log(n)),Space:O(n)

二:完整代码示例 (C++版和Java版)

C++:

template <typename T>
        static void Merge(T array[], T helper[], int begin,int mid,int end,bool min2max=true)
        {
            int i=begin;
            int j=mid+1;
            int k=begin;

            while(i<=mid && j<=end)
            {
                if(min2max?(array[i]<array[j]):(array[i]>array[j]))
                {
                    helper[k++]=array[i++];
                }
                else
                {
                    helper[k++]=array[j++];
                }
            }

            while(i<=mid) helper[k++]=array[i++];
            while(j<=end) helper[k++]=array[j++];

            for(int i=begin;i<=end;i++)
            {
                array[i]=helper[i];
            }
        }
template <typename T>
        static void Merge(T array[],T helper[],int begin,int end,bool min2max=true)
        {
            if(begin>=end) return;
            int mid=begin+(end-begin)/2;

            Merge(array,helper,begin,mid,min2max);
            Merge(array,helper,mid+1,end,min2max);
            Merge(array,helper,begin,mid,end,min2max);
        }
template <typename T>
        static void Merge(T array[],int len,bool min2max=true)
        {
if(len==0) return; T
* helper=new T[len]; Merge(array,helper,0,len-1,min2max); delete[] helper; }

Java:

private void Merge(int[] array,int[] helper,int begin,int mid,int end)
     {
         int i=begin;
         int j=mid+1;
         int k=begin;
         
         while(i<=mid && j<=end)
         {
             if(array[i]<array[j])
             {
                 helper[k++]=array[i++];
             }
             else
             {
                 helper[k++]=array[j++];
             }
         }
         
         while (i<=mid) helper[k++]=array[i++];
         while(j<=end) helper[k++]=array[j++];
         
         for(int p=begin;p<=end;p++)
         {
             array[p]=helper[p];
         }
     }
     
     private void Merge(int[] array,int[] helper,int begin,int end)
     {
         if(begin>=end) return;
         int mid=begin+(end-begin)/2;
         
         Merge(array,helper,begin,mid);
         Merge(array,helper,mid+1,end);
         Merge(array,helper,begin,mid,end);
     }

     public void Merge(int[] array)
     {
         if(array==null || array.length==0) return;
         int n=array.length;
         int[] helper=new int[n];
         
         Merge(array,helper,0,n-1);
     }

 

s5 归并排序

原文:https://www.cnblogs.com/repinkply/p/12795577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!