我是c ++的新手。我为mergesort算法编写了一个代码。我的问题是我想从txt文件中读取100,000个整数作为输入, 我用较小的输入尝试了我的代码并且它有效。但是,当我使用大文件时,它会被停止。 我使用向量动态分配内存。 我使用long数据类型是否有任何错误? 我的代码:
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
#include<conio.h>
void merge(vector<long> &,long ,long , long );
void divide(vector<long> &arr,long min, long max){
long mid;
if(min<max){
mid=(min+max)/2;
divide(arr,min,mid);
divide(arr,mid+1,max);
merge(arr,min,mid,max);
}
return;
}
void merge(vector<long> &arr,long min, long mid,long max){
long i,j,k;
long c[30];
i=min,j=mid+1;
k=min;
while(i<=mid && j<=max){
if(arr[i]<arr[j]){
c[k]=arr[i];
i++;
k++;
}
else{
c[k]=arr[j];
j++;
k++;
}
}
while(i<=mid){
c[k]=arr[i];
i++;
k++;
}
while(j<=max){
c[k]=arr[j];
j++;
k++;
}
for(long i=min;i<k;i++)
arr[i]=c[i];
}
int main(){
vector<long> data;
long tmp;
long count=0;
ifstream fin("sample2.txt");
while(fin >> tmp)
{
data.push_back(tmp);
count++;
}
divide(data,0,count);
cout<<"the sorted array is";
for(long i=0;i<count;i++)
cout<<data[i]<<"\n";
getch();
return 0;
}
答案 0 :(得分:0)
您的问题出在合并功能中:
你超过了本地变量c。
long c[30];
也许还有更多问题,这是我第一次注意到。
试试这个:找出差异......
#include <map>
#include <vector>
#include <fstream>
#include <iostream>
#include <time.h>
using namespace std;
void merge(vector<long> &,long ,long , long );
void divide(vector<long> &arr,long min, long max){
long mid;
if(min<max){
mid=(min+max)/2;
if(min != mid) divide(arr,min,mid);
if(max != mid+1) divide(arr,mid+1,max);
merge(arr,min,mid,max);
}
return;
}
void merge(vector<long> &arr,long min, long mid,long max){
long i,j,k;
map<long,long> c; //uses map because the vector not always start from 0
//other option is to use vector<long> c(max-min) and substruct min when copy to/from it.
//like this: vector<long> c(1+max-min); //initialize size = max-min+1
// c[k-min] = arr[i];
// arr[i] = c[i-min];
i=min,j=mid+1;
k=min;
while(i<=mid && j<=max){
if(arr[i]<arr[j]){
c[k]=arr[i];
i++;
k++;
}
else{
c[k]=arr[j];
j++;
k++;
}
}
while(i<=mid){
c[k]=arr[i];
i++;
k++;
}
while(j<=max){
c[k]=arr[j];
j++;
k++;
}
for(long i=min;i<=max;i++)
arr[i]=c[i];
}
void create_input(int i){
srand(time(NULL));
ofstream fout("sample2.txt");
while(i--){
fout<<rand()<<" ";
}
}
int main(){
vector<long> data;
long tmp;
long count=0;
//create random input
//create_input(31);
ifstream fin("sample2.txt");
while(fin >> tmp)
{
data.push_back(tmp);
count++;//count = data.size(); !!
}
cout<<"the unsorted array is\n";
for(long i=0;i<count;i++)
cout<<i<<"]\t"<<data[i]<<"\n";
divide(data,0,count-1);//use last index not size
cout<<"the sorted array is\n";
for(long i=0;i<count;i++)
cout<<i<<"]\t"<<data[i]<<"\n";
return 0;
}
答案 1 :(得分:-2)
您的程序导致堆栈溢出