回答另一个Stack Overflow问题(这个)我偶然发现了一个有趣的子问题.排序6个整数数组的最快方法是什么?
由于问题是非常低的水平:
&&或||).真的这个问题是一种高尔夫,其目标不是最小化源长度而是执行时间.我把它叫做"Zening"代码在本书的标题中的代码优化禅由迈克尔·亚伯拉什及其续集.
至于为什么它很有趣,有几个层次:
这是我的参考(天真的,未优化的)实现和我的测试集.
#include <stdio.h>
static __inline__ int sort6(int * d){
char j, i, imin;
int tmp;
for (j = 0 ; j < 5 ; j++){
imin = j;
for (i = j + 1; i < 6 ; i++){
if (d[i] < d[imin]){
imin = i;
}
}
tmp = d[j];
d[j] = d[imin];
d[imin] = …Run Code Online (Sandbox Code Playgroud) 在回答这个问题时,一场辩论开始于对QuickSort复杂性的评论.我在大学时代记得的是,在最好的情况O(n^2)下,QuickSort是最坏的情况,O(n log(n))在平均情况下O(n log(n))(但是受到更严格的约束).
我需要的是一个正确的数学解释,意思是average complexity清楚地解释一下那些相信大O符号只能用于最坏情况的人.
我记得如果要定义平均复杂度,你应该考虑所有可能输入的算法的复杂性,计算有多少退化和正常情况.如果当n变大时,退化情况除以n的数量倾向于0,则可以说正常情况下整体函数的平均复杂度.
这个定义是正确的还是平均复杂度的定义不同?如果它是正确的,有人可以比我更严格地陈述它吗?