首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数据结构之归并排序,C++兑现

2012-06-20 
数据结构之归并排序,C++实现下面是我写的用归并排序给20000个数排序,但是到调用函数时,就显示xxx.exe已停

数据结构之归并排序,C++实现
下面是我写的用归并排序给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;
  }
}

[解决办法]
栈溢出了,静态数组定义太大了,改用new吧。
[解决办法]
TR2=new RedType[20000];
new圆括号是只new了一个,而且初始化
中括号是表示个数
[解决办法]
RedType* TR2 = new RedType[20000];
动态申请数组时使用operator new[] (array new操作符)
不是new()
new RedType(20000);
是用20000初始化变量RedType。

热点排行