我无法找到为此选择排序示例找到大theta表示法的过程。我已经在线阅读了那个和tl; dr的嵌套循环意味着它将= O(n ^ 2)然而,我不知道他们是如何得到它的。我需要一步一步找到符号的过程,即增加操作成本和一切。如果有人为这个示例代码做了它会很好,所以我可以更清楚地理解它。提前谢谢......
void select(int selct[])
{
int key;
int comp;
for (int i = 0; i < 5; i++)
{
key = i;
for (int j = i + 1; j < 5; j++)
{
if (selct[key] > selct[j])
{
key = j;
}
}
comp = selct[i];
selct[i] = selct[key];
selct[key] = comp;
}
};
答案 0 :(得分:0)
在分析算法的时间复杂度时,我实际上发现它对不查看代码有帮助,而是考虑驱动算法的核心思想。如果从概念上知道算法正在做什么,通过思考算法将要做什么然后从那里得出时间复杂度,通常更容易找出时间复杂度。
我们在这里应用这种方法。那么选择排序究竟如何运作?好吧,它首先找到最后n个元素中的最小值并将其交换到位置0,然后找到最后n - 1个元素中的最小值并将其交换到位置1,然后找到最后n个中的最小值。 - 2个元素并将其交换到位置2等。
算法的“硬部分”是确定哪个最后的n-k个元素是最小的。选择排序通过迭代这些元素并将每个元素与当前已知最小的元素进行比较来实现。这需要n - k - 1比较。
让我们看看有多少比较。在第一次迭代中,我们需要进行n - 1次比较。在第二次迭代中,我们进行n - 2次比较。第三,我们进行n - 3比较。总结比较次数为我们提供了衡量总工作量的好方法:
(n - 1)+(n - 2)+(n - 3)+ ... + 3 + 2 + 1 = n(n - 1)/ 2
这是一个着名的总结 - 值得将它归于记忆 - 并告诉我们需要进行多少次比较。进行的比较次数是完成工作总量的一个很好的代表。由于有n(n - 1)/ 2 = n 2 / 2 - n / 2 =Θ(n 2 )比较,选择排序的时间复杂度是Θ(N 2 )。