我熟悉其他排序算法,而我在多项式时间内听到的最糟糕的是插入排序或冒泡排序。排除真正可怕的bogosort和类似的那些,是否有任何排序算法的多项式时间复杂度比n ^ 2更差?
答案 0 :(得分:2)
以下是名为 slowsort 的优雅算法示例,该算法在Ω中运行( n ^(log( n )/(2+ ɛ)))对于任何积极的ɛ:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.116.9158&rep=rep1&type=pdf(第5条)。
答案 1 :(得分:1)
这是一个用C#实现的:
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;
}
}
它基本上是一种非常天真的排序算法,再加上一种用不必要的复杂方法计算最小值的索引。
要点是:
最坏的情况(带有比较)将在最坏的情况下执行O(n^3)
次(降序排序的输入),外循环的每次迭代都会将一个元素放到正确的位置,让你只是更接近完全排序。
如果你努力工作,你可能会找到一个几乎任何你想要的复杂度的排序算法。但是,正如评论者指出的那样,没有理由寻找一个像这样的最坏情况的算法。你希望永远不会陷入野外。你真的必须尝试来想出一个这么糟糕的事情。