k = 9 1 2 3 4 5 6 7 8 9
第 5 人出局, i = 4
k = 8 1 2 3 4 6 7 8 9 5
第 1 人出局, i = 0
k = 7 2 3 4 6 7 8 9 1 5
第 7 人出局, i = 4
k = 6 2 3 4 6 8 9 7 1 5
第 4 人出局, i = 2
k = 5 2 3 6 8 9 4 7 1 5
第 3 人出局, i = 1
k = 4 2 6 8 9 3 4 7 1 5
第 6 人出局, i = 1
k = 3 2 8 9 6 3 4 7 1 5
第 9 人出局, i = 2
k = 2 2 8 9 6 3 4 7 1 5
第 2 人出局, i = 0
8 2 9 6 3 4 7 1 5
第 8 人出局, i = 0
逆置
5 1 7 4 3 6 9 2 8
最终出局顺序
例:n = 9, s = 1, m = 0
报错信息 m = 0 是无效的参数!
例:n = 9, s = 1, m = 10
0 1 2 3 4 5 6 7 8
k = 9 1 2 3 4 5 6 7 8 9
第 1 人出局, i = 0
k = 8 2 3 4 5 6 7 8 9 1
第 3 人出局, i = 1
k = 7 2 4 5 6 7 8 9 3 1
第 6 人出局, i = 3
k = 6 2 4 5 7 8 9 6 3 1
第 2 人出局, i = 0
k = 5 4 5 7 8 9 2 6 3 1
第 9 人出局, i = 4
k = 4 4 5 7 8 9 2 6 3 1
第 5 人出局, i = 1
k = 3 4 7 8 5 9 2 6 3 1
第 7 人出局, i = 1
k = 2 4 8 7 5 9 2 6 3 1
第 4 人出局, i = 0
8 4 7 5 9 2 6 3 1
第 8 人出局, i = 0
逆置
1 3 6 2 9 5 7 4 8
最终出局顺序
当 m = 1 时,时间代价最大。达到( n-1 ) + ( n-2 ) + ∙∙∙∙∙∙ + 1 = n(n-1)/2 O(n
2
)。
2-3 设有一个线性表 (e
0
, e
1
, …, e
n-2
, e
n-1
) 存放在一个一维数组 A[arraySize]中的前 n 个数组元
素位置。请编写一个函数将这个线性表原地逆置,即将数组的前 n 个原址内容置换为 (e
n-1
,
e
n-2
, …, e
1
, e
0
)。
【解答】
template<class Type> void inverse ( Type A[ ], int n ) {
Type tmp;
for ( int i = 0; i <= ( n-1 ) / 2; i++ ) {
tmp = A[i]; A[i] = A[n-i-1]; A[n-i-1] = tmp;
}
}