算法设计与分析实验三实验三分治算法(2)
一、实验目的与要求
1、熟悉合并排序算法(掌握分治算法)
二、实验题
1、问题陈述:
对所给元素存储于数组中和存储于链表中两中情况,写出自然合并排序算法.
2、解题思路:
将待排序元素分成大小大相同的两个集合,分别对两个集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合.自然排序是通过一次扫描待排元素中自然排好序的子数组,再进行子数组的合并排序.
三、实验步骤
程序代码:
#include
const int N=100;//定义不可变常量N
//各个函数的声明
...
实验三分治算法(2)
一、实验目的与要求
1、熟悉合并排序算法(掌握分治算法)
二、实验
1、问题陈述:
对所给元素存储于数组中和存储于链表中两中情况,写出自然合并排序算法.
2、解题思路:
将待排序元素分成大小大相同的两个集合,分别对两个集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合.自然排序是通过一次扫描待排元素中自然排好序的子数组,再进行子数组的合并排序.
三、实验步骤
程序代码:
#include
const int N=100;//定义不可变常量N
//各个函数的声明
void ScanTarget(int target[], int n, int head[], int tail[]);
int CountHead(int head[]);
void MergeSort(int a[], int head[], int tail[], int m);
void MergePass(int x[], int y[], int s, int a[], int b[], int m);
void Merge(int c[], int d[], int l, int m, int r);
//主函数的定义
void main()
{
char a;
do
{
int target[N],head[N],tail[N];
int i=0,n,m;
for(; i>n;
cout<<"请输入需要排序的数列:" <>target[i];
ScanTarget(target,n,head,tail);
m=CountHead(head);//调用求长度的函数
MergeSort(target,head,tail,m);//调用归并排序函数
cout<<"排序后:"<>a;
}
while(a!='n' && a!='N');
}
void ScanTarget(int target[], int n, int head[], int tail[])//定义扫描待排数组的函数; {
int i,j=0,k=0;
head[k]=0;
k++;
for(i=1;itarget[i])
{
tail[j++]=i-1;
head[k++]=i;
}
}
tail[j]=n-1;
}
int CountHead(int head[])//定义求长度的函数;
{
int i(0);
while(head[i]!=-1)
{
i++;
}
return i;//返回长度值
}
void MergeSort(int a[], int head[], int tail[], int m)//定义归并排序算法{
int b[N];
int s=1;
while(sm )
{
for(int q=j; q<=r; q++)
d[k++]=c[q];
}
else
{
for(int q=i; q<=m; q++)
d[k++]=c[q];
}
}
程序运行结果如下所示:
请输入需要排序的数列的总数:
5
请输入需要排序的数列:
13 78 34 5 66
排序后:
5 13 34 6
6 78
是否继续(y/n):
n
Press any key to continue
本文档为【算法设计与分析实验三】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。