以下是手头的问题:您有一组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)时间。令我困惑的是整个“构建”整个列表部分。我不确定这是否意味着从头开始构建一个列表给出这些数字并插入然后排序,或者只是将这组数字插入已经排序的列表中。你认为这意味着什么,它会改变我的运行时间吗?谢谢!
答案 0 :(得分:0)
想出来。如果我以不同的方式(并且更容易)使用两个for循环,它将是O(n ^ 2)。我假设已经有一个排序列表,我只是使用插入排序将数字插入其中。