归并排序算法代码
截图是在源程序上修改的,所以截图名字还是冒泡工程;
不知为什么,我归并也要运算很长时间,是不是我哪错了?
别人运算几秒就行的,截图只是小部分数据运算的结果,
#include<iostream>
#include<fstream>#include<vector>
#include<time.h>
#define INFINITE 0xFFFFF
using namespace std;
int max;int i,j;
void merge(int*a,int p,int q,int r)
{
//int r1[],r2[];
int*r1;
int*r2;
r1=new int[max];
r2=new int[max];
int n=r-p;
for(i=p;i<q+1;i++)
{r1[i-p]=a[i];}
r1[q-p+1]=INFINITE;
for(j=q+1;j<r+1;j++)
{r2[j-q-1]=a[j];}
r2[r-q]=INFINITE;
i=0;
j=0;
int k;
for(k=p;k<r+1;k++)
{
if(r1[i]>r2[j])
{a[k]=r2[j++];}
else
{a[k]=r1[i++];}
}
delete [] r1;
delete [] r2;
}
void costtime()
{
cout<<"该程序所花费时间为:"<<clock()<<"毫秒"<<'\n';
}
void mergeSort(int*a,int p,int q)
{
if(q-p>0)
{mergeSort(a,p,(q+p)/2);
mergeSort(a,(q+p)/2+1,q);
merge(a,p,(q+p)/2,q);
}
}
int main()
{
int num;
//int a[80000];
vector<int>scorevector;
ifstream binfile;
binfile.open("C:\\Users\\caiminghai\\Desktop\\binfile.txt");
while(!binfile.eof())
{
binfile>>num;
scorevector.push_back(num);
//cout<<num<<endl;
}
binfile.close();
max=scorevector.size();
//cout<<max;
int*a;
a=new int[max];
for( i=0;i<scorevector.size();i++)
{a[i]=scorevector[i];}
mergeSort(a,0,max-1);
for(i=0;i<scorevector.size();i++)
cout<<a[i]<<endl;
fstream largeW_bubble;
largeW_bubble.open("C:\\Users\\caiminghai\\Desktop\\largeW_bubble.txt");
for(i=0;i<scorevector.size();i++)
{
largeW_bubble<<scorevector[i]<<'\n';
}
largeW_bubble.close();
costtime();
delete [] a;
return 0;
}