Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否存在最坏情况时间复杂度为n^3的排序算法?_Algorithm_Sorting_Time Complexity - Fatal编程技术网

Algorithm 是否存在最坏情况时间复杂度为n^3的排序算法?

Algorithm 是否存在最坏情况时间复杂度为n^3的排序算法?,algorithm,sorting,time-complexity,Algorithm,Sorting,Time Complexity,我熟悉其他排序算法,在多项式时间里,我听说最糟糕的是插入排序或冒泡排序。除了真正糟糕的bogosort和类似的算法外,还有比n^2更糟糕的多项式时间复杂度的排序算法吗?这里有一个用C#实现的算法: public void BadSort(T[]arr),其中T:IComparable { 对于(int i=0;i

我熟悉其他排序算法,在多项式时间里,我听说最糟糕的是插入排序或冒泡排序。除了真正糟糕的bogosort和类似的算法外,还有比n^2更糟糕的多项式时间复杂度的排序算法吗?

这里有一个用C#实现的算法:

public void BadSort(T[]arr),其中T:IComparable
{
对于(int i=0;i0
{
isShortest=假;
打破
}
}
如果(isShortest)
{
最短=j;
打破
}
}
var tmp=arr[i];
arr[i]=arr[最短];
arr[最短]=tmp;
}
}
这基本上是一个非常简单的排序算法,再加上一个用最小值计算索引的不必要的复杂方法

要点是:

  • 对于每个索引
    • 从这一点找到向前移动的元素

      • 与之后的所有其他元素相比,最后是,下面是一个名为slowsort的优雅算法示例,它在Ω(n^(log(n)/(2+ɛ)对于任何正ɛ:


        (第5节)。

        我能想出一个,为什么不呢?只要取n^2个,重复n次。如果你愿意,我可以为你写一个,价格非常合理。但是你为什么想要一个呢?看看Bogosort:)当然可以-快速排序,然后是从1到N的三个嵌套循环(做一个固定时间的无操作)。“排除真正可怕的”有点难。由于最简单的解决方案是
        O(n²)
        ,因此比这更糟糕的事情将是非常可怕的。哇。我喜欢那张纸。不幸的是,我找不到他们引用的“聪明的O(n³)排序例程”,无论是在Bentley的编程Perls还是Steele的行话文件中。你能吗?@Bergi不。如果你找到了,请告诉我。@Flumpson:如果这已经回答了你的问题,请把它标记为一个答案,这样人们就会知道你还没有找到答案。
        public void BadSort<T>(T[] arr) where T : IComparable
        {
            for (int i = 0; i < arr.Length; i++)
            {
                var shortest = i;
                for (int j = i; j < arr.Length; j++)
                {
                    bool isShortest = true;
                    for (int k = j + 1; k < arr.Length; k++)
                    {
                        if (arr[j].CompareTo(arr[k]) > 0)
                        {
                            isShortest = false;
                            break;
                        }
                    }
                    if(isShortest)
                    {
                        shortest = j;
                        break;
                    }
                }
                var tmp = arr[i];
                arr[i] = arr[shortest];
                arr[shortest] = tmp;
            }
        }