【问题标题】:Insertion comparison #'s seem too big插入比较#似乎太大了
【发布时间】:2016-08-10 23:04:41
【问题描述】:

对于具有 100 个随机两位数的向量,如果这些比较数字的值应该这么大,我会感到困惑。完整程序 --> 安全链接:https://ideone.com/oybDbD 程序输出在链接的底部。感谢输入。

int insertionSort (vector<int> &v) {
    int j, temp, counter = 0;

    for (int i = 1; i < v.size(); i++) {
        j = i;

        while (++counter && j > 0 && v[j] < v[j-1]){
            temp = v[j];
            v[j] = v[j-1];
            v[j-1] = temp;
            j--;
        }
    }
    return counter;
}

【问题讨论】:

    标签: c++ algorithm sorting selection insertion


    【解决方案1】:

    插入排序的平均案例性能为O(N^2)(参见wiki entry)。因此,对于包含 100 个元素的向量,预期的比较次数为 O(10000)。因此,比较结果为 2656,或者在您的第二次运行中为 4995,比较低于您的预期。

    【讨论】:

    • 澄清一下,插入排序的预期比较次数是 10, 000?感谢您的帮助:)
    • @Lightypulse:不完全是。平均比较次数为O(N^2),在这种情况下计算为O(10000)。期望值进入统计数据,这是一个不同的球赛。我对那里缺乏明确性表示歉意。此外,this answer 可以帮助您更好地了解正在发生的事情。
    • @Lightypulse:如果我的回答对您有帮助,请随时通过点击箭头或勾选标记来投票或接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多