我很困惑为什么我的插入排序的平均情况的工作示例与我在计算平均情况时找到的公式非常不同。
我正在使用的插入排序代码如下。
int[] myNumbers = {1, 2 3, 4};
int j;
int key;
int i;
for (i = 1; i < myNumbers.length ; i++){
j = i - 1;
key = myNumbers[i];
while (j >= 0 && myNumbers[j] > key) {
myNumbers[j + 1] = myNumbers[j];
j--;
}
myNumbers[j+1] = key;
}
假设您要对四个值进行排序:1,2,3,输入的每个排列都是相同的,每个可能输入的比较次数如下:
3 comparisons for inputs 1234, 2134
4 comparisons for inputs 1243, 1324, 2143, 2314, 3124, 3214
5 comparisons for inputs 1342, 1423, 2341, 2413, 3142, 3241, 4123, 4213
6 comparisons for inputs 1432, 2431, 3412, 3421, 4132, 4231, 4312, 4321
然后平均值为=(3 * 2)+(4 * 6)+(5 * 8)+(6 * 8)/ 24 = 4.9166666
但我发现用于计算平均比较数的公式是 (n ^ 2 - n)/ 4给出3不能正确的? 3是最好的情况。
我看到平均情况计算为最坏情况的一半,我认为这是解决问题的正确方法。这只是我的小集合产生了意想不到的结果吗?
非常感谢任何帮助!