s4 希尔排序

一:解题思路

Time:O(n^2/3),Space:O(1)

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

C++:

template <typename T>
        static void Shell(T array[],int len,bool min2max=true)
        {
            if(len==0) return;
            int d=len;
            do
            {
                d=d/3+1;
                for(int i=d;i<len;i+=d)
                {
                    int k=i;
                    T e=array[i];

                    for(int j=i-d;j>=0;j-=d)
                    {
                        if(min2max?(array[j]>e):(array[j]<e))
                        {
                            k=j;
                            array[j+d]=array[j];
                        }
                        else
                        {
                            break;
                        }
                    }

                    if(k!=i)
                    {
                        array[k]=e;
                    }
                }

            }while(d>1);
        }

Java:

public void Shell(int[] array)
     {
         if(array==null || array.length==0) return;
         int len=array.length;
         int d=len;
         do
         {
             d=d/3+1;
             for(int i=1;i<len;i+=d)
             {
                 int k=i;
                 int e=array[i];

                 for(int j=i-d;j>=0;j-=d)
                 {
                     if(array[j]<e)
                     {
                         k=j;
                         array[j+d]=array[j];
                     }
                 }

                 if(k!=i)
                 {
                     array[k]=e;
                 }
             }

         }while(d>1);
     }
posted @ 2020-04-28 16:44  repinkply  阅读(147)  评论(0)    收藏  举报