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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //出自51博客:www.Amanda0928.51.com 第一章 一、选择题 1.B; (typedef ,t...
    Damongggggg阅读 13,825评论 0 1
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 12,271评论 0 10
  • C++基础 模板及标准模板库 模板的作用模板使程序员能够快速的建立具有类型安全得库集合和函数集合,它的实现,方便了...
    I踏雪寻梅阅读 3,443评论 0 4
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,231评论 0 1
  • 第一天 抵达墨尔本机场,整队组织出关,期间在出关时,要求学生独立和和澳洲海关进行沟通,取行李,根据银幕上的行李指示...
    rambooooo阅读 4,304评论 0 0