所以我对C ++及其内存处理的复杂性有点新鲜。
我写了一段代码,其中main函数中的迭代器不像我期望的那样表现。它应该取n
输入,而不是根据输入的值中途退出。 mergeSort
和merge
函数运行正常(至少对于具有预定义元素的小数组),因此无需检查。主要问题在于main
功能。任何帮助将不胜感激。
#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;
void merge(long int *a, long int start, long int mid, long int end)
{
long int *c=new long int[1000000];
long int i,ptr1=0,ptr2=0,ptr=0;
long int length1,length2;
length1=mid-start+1;
length2=end-mid;
while(ptr1<length1 && ptr2<length2){
if(a[start+ptr1]>a[mid+ptr2+1]){
c[start+ptr]=a[mid+ptr2+1];
ptr++;
ptr2++;
}
else if(a[start+ptr1]<=a[mid+ptr2+1]){
c[start+ptr]=a[start+ptr1];
ptr++;
ptr1++;
}
}
while(ptr1<length1){
c[start+ptr]=a[start+ptr1];
ptr++;
ptr1++;
}
while(ptr2<length2){
c[start+ptr]=a[mid+ptr2+1];
ptr++;
ptr2++;
}
for(i=0;i<ptr; i++)
a[start+i]=c[start+i];
}
void mergeSort(long int *a, long int start, long int end){
if(start<end){
long int mid;
mid=(start+end)/2;
mergeSort(a, start, mid);
mergeSort(a,mid+1, end);
merge(a, start, mid, end);
}
}
/*Problem lies in Main*/
int main()
{
string s;
int n,i,j;
long int *a=new long int[1000000]();
cin >> n;
for(i=0;i<n;i++){ /************Loop exiting midway************/
cin >> s;
stringstream g(s);
g >> n;
a[i]=n;
}
mergeSort(a,0,n-1);
for(j=0; j<5; j++){
cout << a[j] << "\n";
}
return 0;
}
原谅我代码格式不正确。
答案 0 :(得分:2)
g >> n;
是原因。你覆盖n
,因此它在中途失败了循环条件。
只需在循环中使用cin >> a[i];
。