选择排序运行时间混乱

时间:2014-04-28 14:50:51

标签: algorithm sorting data-structures

根据 http://algs4.cs.princeton.edu/21elementary/ "选择排序使用~N 2 / 2比较和N个交换来排序长度为N的数组。"
例如,我在数组中有两个项目     String [] a = {" h"," t"};
我可以假设选择排序使用2 2 / 2 = 2比较和2个交换来排序长度为2的数组吗? 但当我运行这个: http://algs4.cs.princeton.edu/21elementary/Selection.java.html 它只比较一次。当然,这是常见的,因为唯一要比较的项目是h和t。但我仍然对声明感到困惑。我的实验有问题吗?我是新人。

2 个答案:

答案 0 :(得分:2)

选择排序使用大约N ^ 2/2比较和N个交换。

对于精确分析,选择排序使用

N-1 + N-2 + N-3 + ..... 1比较以对长度为N的数组进行排序。

因此,比较的总数=(N-1)*(N)/ 2 = N ^ 2/2-N / 2,其近似等于N ^ 2/2。这是他们写的。

在N为2的示例中,比较= 1 * 2/2 = 1。 交换次数= 1.(N-1)

答案 1 :(得分:0)

符号f(n)~g(n)表示: $$ \ lim_ {n \ to \ infty} \ frac {f(n)} {g(n)} = 1 $$

在这种特殊情况下,您会看到第一个元素与其他$ n - 1 $进行比较,第二个元素与$ n - 2 $进行比较,直到倒数第二个为1.因此,比较次数为:

(n - 1)+(n - 2)+ ... + 1 = n(n - 1)/ 2~n ^ 2/2