问题
已知在一位数组A[m+n]中依次存放两个线性表(a1, a2, ……, am)和(b1, b2, ……, bn)。设计算法将数组中两个顺序表的位置互换,即将(b1, b2, ……, bn)放在(a1, a2, ……, am)前面。(注:顺序表是用一组地址连续的存储单元依次存储线性表中的数据元素,上述两s题可以用数组实现。)
题解
复杂度: 时间复杂度O(n) 空间复杂度O(1):
算法思想:
cpp代码:
#include <iostream>
using namespace std;
void print_array(int * parr, int n){
for (int i = 0 ; i < n ; i ++)
cout << * (parr + i) << " ";
cout << endl;
};
int main() {
int A[20];
for(int i = 0;i < 20; i ++ )
A[i] = i + 1;
//输入一个线性表. 这一步可以替换。下面喂实现算法。以m=14 n=6为例
int m = 14,n=6;
int * parr = &A[0];
print_array( &A[0],20);
while(n >= 1 and m >= 1){
int iter_num = min(m,n);
for(int i = 0;i < iter_num ;i ++){
int temp = * (parr + i);
* (parr + i) = * (parr + m + i);
* (parr + m + i ) = temp;
}
if(m >= n){
parr = parr + n ;
m = m - n;
}
else{
parr = parr + m;
n = n - m;
}
}
print_array( &A[0],20);
}