2.2 分析算法
2-1
Θ ( n ³ ) Θ(n³) Θ(n³)
2-2
Selection-Sort(A)
1 for i = 1 to A.length - 1
2 Subscript = i // 存储下标
3 for j = i to A.length - 1
4 if A[Subscript] > A[j]
5 Subscript = j // 存储元素数据更小的数组下标
6 Data = A[Subscript] // 交换数据
7 A[Subscript] = A[i] // 交换数据
8 A[i] = Data // 交换数据
- 该算法的循环不变式:A[1…i]总是排好序的,Subscript总是A[i…n]中最小元素数据的下标
- 因为当前面的A[i…n - 1]已经是排序好的,且留在最后的一个元素中的数据一定是整个数组中最大的,所以可以省略掉最后一个的排序
- 每条语句的运行之和为:
Selection-Sort(A)
1 for i = 1 to A.length - 1 c1 n
2 Subscript = i c2 n - 1
3 for j = i to A.length c3 ①
4 if A[Subscript] > A[j] c4 ②
5 Subscript = j c5 ②
6 Data = A[Subscript] c6 n - 1
7 A[Subscript] = A[i] c7 n - 1
8 A[i] = Data c8 n - 1
① ∑ j = 2 n t j \sum ^{n}_{j=2}t_{j} ∑j=2ntj
② ∑ j = 2 n ( t j − 1 ) \sum ^{n}_{j=2}\left( t_{j}-1\right) ∑j=2n(tj−1)
该算法的运行时间(执行每条语句的运行时间之和)是:
T ( n ) = C 1 n + C 2 ( n − 1 ) + C 3 ∑ j = 2 n t j + C 4 ∑ j = 2 n ( t j − 1 ) + C 5 ∑ j = 2 n ( t j − 1 ) + C 6 ( n − 1 ) + C 7 ( n − 1 ) + C 8 ( n − 1 ) T\left( n\right) =C_{1}n+C_{2}\left( n-1\right)+C_{3}\sum ^{n}_{j=2}t_{j}+C_{4}\sum ^{n}_{j=2}\left( t_{j}-1\right)+C_{5}\sum ^{n}_{j=2}\left( t_{j}-1\right)+C_{6}\left( n-1\right)+ C_{7}\left( n-1\right)+ C_{8}\left( n-1\right) T(n)=C1n+C2(n−1)+C3∑j=2ntj+C4∑j=2n(tj