在我的教科书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)
。如果我做错了,请纠正我。