以下算法的大O值是多少?为什么这么值?
algorithm A (val array <ptr to int>)
1 n = 0
2 loop ( n < array size )
1 min = n;
2 m = n;
3 loop ( m < array size)
1 if (array[m] < array[min])
1 min = m;
4 swap(array[min],array[n]);
3 n = n + 1
我回答了O(n ^ 2)我是否正确?至于我如何得出这个结论,内部循环执行n次,其中n =数组大小,外部循环执行n次,其中n是数组大小n * n = n ^ 2
答案 0 :(得分:4)
这就是所谓的Selection sort,实际上它有O(n 2 )的复杂性。
答案 1 :(得分:2)
是的!你是对的!
这是选择排序算法。 它的Θ(n ^ 2)更精确。
编辑:为什么这个值?
你拿第一个元素。将它与所有其他元素进行比较,以便在数组中找到最小值并将其置于首位。迭代:n。 你拿第二个元素。将它与数组的其余部分进行比较,找到该部分的最小值(整个数组中的第二个最小值)并将其放在第二位。迭代次数:n-1。 以这种方式继续最后一个元素,迭代:1。
总= n + n-1 + ... + 1 = n(n + 1)/ 2。那是O(n ^ 2)。