C++程序一个血泪教训
作者:杰伦哎呦哎呦 发布时间:[ 2017/4/26 10:50:00 ] 推荐标签:测试开发技术 C++ 程序
编译没问题呀,但是提示我越界了,找了一个下午,后无意发现原来l和1弄混了……千万吸取教训!
#include<iostream>
#include<algorithm>
using namespace std;
void Merge(int *initList, int *mergedList, const int l, const int m, const int n )
//n代表有效的数字个数(除了数组首数字0外的数字个数)也是后一个有效数字的下标
//l代表第一个有效数字的下标,m代表第一组有效数字后一个数字的下标
{
int i1, i2, iResult;
for (i1 = l, i2 = m + l, iResult = l; i1 <= m && i2 <= n; iResult++)
{
if (initList[i1] <= initList[i2])
mergedList[iResult] = initList[i1++];
else
mergedList[iResult] = initList[i2++];
}
copy(initList + i1, initList + m + 1, mergedList + iResult);
copy(initList + i2, initList + n + 1, mergedList + iResult);
}
void MergePass(int *initList,int *resultList,const int n,const int s)
{
int i;
for (i = 1; i <= (n - 2 * s + 1); i += 2 * s)
Merge(initList, resultList, i, i+s-1 , i+2*s-1);
if ((i + s - 1) < n)
Merge(initList, resultList, i, i + s - 1, n);
else
copy(initList + i, initList + n + 1, resultList + i);
}
int main()
{
int m[] = { 0,26,5,77,1, 61,11,59,15,48,19 };//a[0]不用
int n[11] = {0};
MergePass(m, n, 10, 1);
for (int i = 1; i < 11;i++)
{
cout << n[i] << " ";
}
cout << endl;
MergePass(n, m, 10, 2);
for (int i = 1; i < 11; i++)
{
cout << m[i] << " ";
}
cout << endl;
MergePass(m, n, 10, 4);
for (int i = 1; i < 11; i++)
{
cout << n[i] << " ";
}
cout << endl;
MergePass(n, m, 10, 8);
for (int i = 1; i < 11; i++)
{
cout << m[i] << " ";
}
cout << endl;
return 0;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11