shell排序的时间复杂度

时间:2016-05-08 05:52:43

标签: java algorithm time-complexity shellsort

在我的教科书Algorithms中,我读到了:

  

没有关于平均病例数的数学结果   比较了随机排序输入的shellsort。递增序列   已经设计出推动最坏情况的渐近增长   比较数低至N 4/3,N 5/4,N 6/5 ,. 。 。 ,但很多   这些结果主要是学术兴趣,因为这些   功能很难彼此区分(和一个   N的实际值的常数因子N。

并且,在bigocheatsheet.com中,给出了Shell的时间复杂度排序为:

  • 最坏情况:O((nlog(n))^2)
  • 平均值:O((nlog(n))^2)
  • 最佳案例:O(n)

而且,这是我的shell排序实现:

/**
 * Java program to implement shell sort
 */
public class Solution
{
    private static final int arr[] = {2,5,4,3,7,8,9,1,6,6};
    public static void main(String[] args)
    {
        final int N = arr.length;
        int h = 1;
        while(h<(N/3))
            h = 3*h + 1;

        while(h>=1)
        {
            for(int i=h;i<N;i++)
            {
                for(int j=i;j>=h && (arr[j-h]>arr[j]);j-=h)
                {
                    int temp = arr[j-h];
                    arr[j-h] = arr[j];
                    arr[j] = temp;
                }
            }

            h=h/3;
        }

        for(int x:arr)
            System.out.println(x);
    }

}

现在的问题是,我无法理解Shell排序的最坏情况复杂性如何来到O((nlog(n))^2)。如果我做错了,请纠正我。

0 个答案:

没有答案