数据结构之归并排序,C++实现
蛟龙-_- 2011-06-24 07:50:26 下面是我写的用归并排序给20000个数排序,但是到调用函数时,就显示xxx.exe已停止工作,难道是要排序的数太多了?哪位高手给看看是怎么回事,谢谢了。
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<iomanip>
using namespace std;
#define MAXSIZE 20000
typedef struct{
int key;
}RedType;
typedef struct{
RedType r[MAXSIZE+1];
int length;
}Sqlist;
void Merge (RedType SR[],RedType TR[],int i,int m,int n)
{
int j,k;
for (j=m+1,k=i;i<=m&&j<=n;++k)
{
if(SR[i].key<SR[j].key) TR[k]=SR[i++];
else TR[k]=SR[j++];
}
if (i<=m)
while (k<=n&&i<=m) TR[k++]=SR[i++];
if (j<=n)
while (k<=n&&j<=n) TR[k++]=SR[j++];
}
void MSort(RedType SR[], RedType TR1[], int s, int t)
{
int m;
RedType TR2[20000];
if (s==t) TR1[t] = SR[s];
else {
m=(s+t)/2; // 将SR[s..t]平分为SR[s..m]和SR[m+1..t]
MSort(SR,TR2,s,m); // 递归地将SR[s..m]归并为有序的TR2[s..m]
MSort(SR,TR2,m+1,t); // 将SR[m+1..t]归并为有序的TR2[m+1..t]
Merge(TR2,TR1,s,m,t); // 将TR2[s..m]和TR2[m+1..t]归并到TR1[s..t]
}
}
void main()
{
int i,a[20001];
cout<<"\\(^o^)/产生20000随机数过程\\(^o^)/"<<endl;
srand((unsigned)time(NULL));
for(i=1;i<20001;i++)
a[i]=rand()%32768;
system("pause");
for(i=1;i<20001;i++)
{
cout<<setw(6)<<a[i]<<" ";
if(i%10==0) cout<<endl;
}
Sqlist L;
L.length=0;
for(i=1;i<20001;i++)
{
L.r[i].key=a[i];
L.length++;
}
system("pause");
cout<<"Breaking Line Here......"<<endl;
MSort(L.r, L.r, 1, L.length);
for(i=1;i<20001;i++)
{
cout<<setw(6)<<L.r[i].key<<" ";
if(i%10==0) cout<<endl;
}
}