归并排序C实现归并排序C实现
#include
#include
#include
#define N 10
int randGenerator(double vArray[],int n);
int Merge(double vArray[],double Lr[],int i,int m,int n);
int Msort(double vArray[],double Lr[],int s,int t);
int main()
{
double vArray[N];
randGenerator(v...
归并排序C实现
#include
#include
#include
#define N 10
int randGenerator(double vArray[],int n);
int Merge(double vArray[],double Lr[],int i,int m,int n);
int Msort(double vArray[],double Lr[],int s,int t);
int main()
{
double vArray[N];
randGenerator(vArray,N);
printf("待排序序列:\n\n");
for(int i = 0;i < N; i++)
{
printf("%lf\n",vArray[i]);
}
double Lr[N];
Msort(vArray,Lr,0,N-1);
printf("\n\n已排序序列:\n\n");
for(int j = 0;j < N; j++)
{
printf("%lf\n",vArray[j]);
}
getchar();
return 0;
}
/*---用(0,1)内的随机数初始化待排序数组---*/
int randGenerator(double vArray[],int n)
{
srand((unsigned int)time(NULL));
for(int i = 0;i < n; i++)
{
vArray[i] = (double)(rand()/(RAND_MAX - 0.0));
}
return 0;
}
/*----将有序的vArray[i..m]和有序的vArray[m+1..n]归并为有序的Lr[i..n]---*/
int Merge(double vArray[],double Lr[],int i,int m,int n)
{
int j = i;
int k = m + 1;
int l = i;
//将有序的vArray[i..m]和有序的vArray[m+1..n]归并为有序的Lr[i..n]
while(j <= m && k <= n)
{
if(vArray[j] < vArray[k])
{
Lr[l++] = vArray[j++];
}
else
{
Lr[l++] = vArray[k++];
}
}
while(j <= m)
{
Lr[l++] = vArray[j++];
}
while(k <= n)
{
Lr[l++] = vArray[k++];
}
//将有序序列Lr[i..n]拷回vArray[i..n]中,使vArray[i..n]为有序
for(j = i;j <= n; j++)
{
vArray[j] = Lr[j];
}
return 0;
}
/*---将vArray[s..t]归并排序为有序---*/
int Msort(double vArray[],double Lr[],int s,int t)
{
if(s < t)
{
int m = (s + t) / 2;
Msort(vArray,Lr,s,m);
Msort(vArray,Lr,m + 1,t);
Merge(vArray,Lr,s,m,t);
}
return 0;
}
本文档为【归并排序C实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。