【问题标题】:building/inserting into sorted list构建/插入排序列表
【发布时间】:2013-12-09 19:18:34
【问题描述】:

这是手头的问题:您有一组 N 个随机数要插入到排序列表中(从最小到最大)。 构建整个列表的最坏情况下的渐近时间性能是多少?

我知道如何在几种语言的代码中插入排序列表(我知道有几种不同的方法): 我让程序检查数组中是否还有空间容纳另一个项目。然后,为了将项目插入列表,列表中所有大于要插入的项目都将通过 for 循环向右移动。然后我将要插入的项的指针记录在适当的数组位置。 在 C++ 中:

void SortedListAsArray::Insert (Object& object)
{
    if (count == array.Length ())
        throw domain_error ("list is full");
    unsigned int i = count;
    while (i > 0 && *array [i - 1U] > object)
    {
        array[i] = array [i - 1U];
        --i;
    }
    array[i] = &object;
    ++count;
}

我认为这是 O(n) 时间。让我感到困惑的是整个“构建”整个列表部分。我不确定这是否意味着根据这些数字从头开始构建一个列表并将它们插入然后排序,或者只是将一组数字插入到已经排序的列表中。你们认为这意味着什么,它会改变我的运行时间吗?谢谢!

【问题讨论】:

    标签: list sorting insert asymptotic-complexity


    【解决方案1】:

    想通了。如果我使用两个 for 循环以不同的方式(并且更容易)做到这一点,那将是 O(n^2)。我假设已经有一个排序列表,我只是使用插入排序将数字插入其中。

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多