数据结构之归并排序,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;
}
}
#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;
}
}
...全文
相关推荐
cpp-使用C的160算法和数据结构问题
本文将深入探讨“cpp-使用C的160算法和数据结构问题”,并结合“C/C++开发-其它杂项”这一标签,来解析C++中的算法与数据结构的重要性以及它们在实际问题中的应用。
数据结构之归并排序图文详解及代码(C++实现)
代码: #include<iostream> using namespace std; #define MAXSIZE 20//顺序表的最大长度 typedef int KeyType;//定义关键字类型为整型 typedef int InfoType; typedef struct { KeyType key;//关键字项 InfoType otherinfo;/...
dsa-in-cpp:C ++中的数据结构和算法问题的实现
C++作为一门强大的编程语言,因其面向对象特性、高效性能以及丰富的库支持,常被用于实现复杂的数据结构和算法。本文将以"dsa-in-cpp"项目为实例,深入探讨C++中常用的数据结构和算法的实现。
revcount_MergeSort.rar_数据结构_Visual_C++_
《使用Visual C++实现归并排序统计逆序对》在计算机科学中,数据结构与算法是编程的基础,其中排序算法扮演着至关重要的角色。
数据结构数据结构
“shiyan2.cpp”是一个C++的源代码文件。C++在C语言的基础上增加了面向对象的特性,使得数据结构的设计更加灵活。在C++中,我们可以使用类来封装数据和操作,实现抽象数据类型。


