为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 算法设计与分析实验三

算法设计与分析实验三

2019-09-17 9页 doc 20KB 48阅读

用户头像

is_447713

暂无简介

举报
算法设计与分析实验三实验三分治算法(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,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索