我有一个作业,使用算法的经验分析在插入和合并排序之间进行比较,并且我正在使用基本操作计数来衡量效率。
我的问题:对于相同的输入大小,每次操作计数都相同是正常的吗? (知道我正在生成随机值,因此每次运行的值都不同)

这是我的方法(在Java中):

public static void insertionSort(int[] randomArray) {
    int key, j;
    for (int i = 1; i < randomArray.length; i++) {
        key = randomArray[i];
        j = i - 1;
        increasCounter();
        while (j >= 0 && randomArray[j] > key) {
            randomArray[j + 1] = randomArray[j];
            j--;
        }
        randomArray[j + 1] = key;
    }
}


基本操作是比较“ randomArray [j]>键”

最佳答案

我认为您应该只在此代码内增加计数器

while (j >= 0 && randomArray[j] > key) {
        increaseCounter();
        randomArray[j + 1] = randomArray[j];
        j--;
    }


我们计算效率,您需要计算程序在完成之前执行的步骤数,之前的代码仅计算它在for代码中循环的次数,而没有计算一次内的循环,而仅计算一次数组

08-03 14:15