- 题目:有两个排序的数组A1,A2,内存在A1的末尾有足够的空余空间容纳A2.请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字都是排序的。
- 分析:和前面的例题一样,很多人首先想到的方法是在A1中从头到尾复制数字,但这样就会出现多次复制一个数字的情况。更好的办法时从尾到头比较A1和A2中的数字,并把较大的数字复制到A1中的合适位置。
- 代码如下:
#include<iostream>
int main() {
int test1[20] = { 1,3,5,11,14,19 };
int test2[20] = { 2,3,6,7,8,10,17,20 };
int numberoftest1 = (sizeof(test1) >> 2) - 1;//test1的长度
int numberoftest2 = (sizeof(test2) >> 2) - 1;//test2的长度
while (!test1[numberoftest1]) {//找到test1中的最后一个元素
numberoftest1--;
}
while (!test2[numberoftest2]) {//找到test2中的最后一个元素
numberoftest2--;
}
int newnumber = numberoftest1 + numberoftest2 + 1;//新的test1中的索引
int newnumber_prepare(newnumber);//设置一个备用变量,用于后面输出
while (newnumber >= 0) {//比较两个数组的最后一个元素,将大的先放入A1
if (test1[numberoftest1] > test2[numberoftest2] && numberoftest1 >= 0) {//判断条件和原数组中是否还省有元素
test1[newnumber] = test1[numberoftest1--];
}
else if (numberoftest2 >= 0) {
test1[newnumber] = test2[numberoftest2--];
}
newnumber--;
}
for (int i = 0; i <= newnumber_prepare; i++) {//打印数组
std::cout << test1[i] << " ";
}
}
运行结果如下:
- 总结:在面对数组结构时,可以考虑从后面向前移动元素,往往可以减少很多不必要的移动。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/130588.html