对于一个整数数组,最低效的排序方式是什么?该函数应在每一步中取得进展(例如,没有无限循环)。该算法的运行时间是多少?
任何事物都不可能存在最低效的算法。只要你接受从任意算法开始,就可以构建出另一个等效但更低效的算法,那么这一点很容易通过反证法来证明。
波格排序的平均运行时间为O(n*n!)
,糟糕。
O(infinity)
。 - user395760我能想到的最低效的算法是排列排序,它有一个有限的运行时间上界。其思想是生成输入的每个排列(组合)并检查它是否已排序。
上界为O(n!),当数组已排序时,下界为O(n)。
你可以通过生成所有唯一的排列,然后检查数组是否排序来在 O(n!*n)
的时间复杂度内完成。
这将具有上界(第一个猜测:O(n^(n*m))?)。
这是一个奇怪的问题,通常我们会选择最快的方式。
找到最大值并将其移到一个列表中。重复上一步,直到原始列表只剩下一个元素。您可以保证 O(N^2) 的时间复杂度。
Bogosort是一种最糟糕的排序算法,使用洗牌。但从另一个角度来看,它在一步中对数组进行排序的概率很低 :)