完善程序: (序列重排) 全局数组变量 定义如下:
const int SIZE = 100;int a[SIZE], n;它记录着一个长度为 的序列 。 现在需要一个函数,以整数 为参数,实现如下功能:将序列 的前 个数与后 个数对调,且不改变这 个数(或 个数)之间的相对位置。例如,长度为 的序列 ,当 时重排结果为 。 有一种朴素的算法可以实现这一需求,其时间复杂度为 、空间复杂度为 :
void swap1( int p ){ int i, j, b[SIZE]; for ( i = 1; i <= p; i++ ) b[①] = a[i]; // (3分) for ( i = p + 1; i <= n; i++ ) b[i - p] = ②; // (3分) for ( i = 1; i <= ③; i++ ) // (2分) a[i] = b[i];}我们也可以用时间换空间,使用时间复杂度为 、空间复杂度为 的算法:
void swap2( int p ){ int i, j, temp; for ( i = p + 1; i <= n; i++ ) { temp = a[i]; for ( j = i; j >= ④; j-- ) // ( 3 分) a[j] = a[j - 1]; ⑤ = temp; // ( 3 分) }}①处应填( )
②处应填( )
③处应填( )
④处应填( )
⑤处应填( )