数据结构实验报告十四-基数排序_第1页
数据结构实验报告十四-基数排序_第2页
数据结构实验报告十四-基数排序_第3页
数据结构实验报告十四-基数排序_第4页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

问题描述:基数排序是采用“分配”与“收集”的办法,用对多关键码进行排序的思想实现对单关键码进行排序的方法。实现多关键码排序有两种常用的方法:(1)最高位优先MSD(MostSignificantDigitfirst);(2)最低位优先LSD(LeastSignificantDigitfirst)。实现基数排序功能。基本要求: (1)需排序的数据是英文单词,从文件中读取。 (2)根据词典顺序排列。排序结果写入文件保存。需求分析:本程序需要利用二维数组来存放操作数,并进行相应的操作。实现提示:(1)根据读入的英文单词的最长的,决定基数排序的趟数。(2)基数使用24(字母的个数)(3)从单词的第一个字母开始进行基数排序。二、概要设计:抽象数据类型:需二维数组来进行相应的操作。算法的基本思想:基数排序是属于“分配式排序”,又称“桶子法”,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。最高位优先(MostSignificantDigitfirst)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。最低位优先(LeastSignificantDigitfirst)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。另外,对于本实验还有要求就是在文件中读取字符串,同时间字符串保存与文件中,这就需要#include<ifstream>头文件,同时用函数ofstreamoutfile(“d:\\f1.dat”,ios::out);保存到指定的文件和ifstreaminfile("file.txt",ios::in);打开指定的文件。程序的流程 程序由三个模块组成:输入模块:读入基数存放在数组里面。处理模块:进行相应操作。输出模块:将数据输出。三、详细设计算法的具体步骤:voidradix(stringc[],inta){ inti=0,j=0,k=0,d=0,m=0; stringstr[26][20];//用来存放基数排序的桶for(j=9;j>=0;j--){//根据基数排序法,//对单词各位(0—n-1)进行排序 for(i=0;i<a;i++){//对count个单词进行J位进排序桶 k=c[i][j]-97; if(k<0){k=0;} str[k][m++]=c[i]; } for(i=0,k=0;i<n&&k<26;k++)//按顺序回收排序桶 for(d=0;d<n;d++) if(str[k][d][0]>96&&str[k][d][0]<123||str[k][d][0]>64&&str[k][d][0]<91){//判断26各排序桶是否有单词 c[i++]=str[k][d]; str[k][d][0]=32; } m=0;}}四、测试结果本实验的测试结果截图如下:输入:输出:五、用户使用说明(可选)1、本程序的运行环境为windows操作系统,执行文件为14.exe2、本程序是从文件中读取数据,然后把数据存储到指定文件中去。六、实验心得(可选)此次实验比较困难,由于对这方面的知识掌握的不是很牢固,所以编写实验时不明白之处比较多,后来在同学的帮助下完成了实验。通过此次实验对基数排序有了比较深刻的了解,还是比较有收获的。附录(实验代码):#include<iostream>#include<string>#include<fstream>usingnamespacestd;#definen10//假设没个单词最大数目是10voidradix(stringc[],inta){ inti=0,j=0,k=0,d=0,m=0; stringstr[26][20];//用来存放基数排序的桶for(j=9;j>=0;j--){//根据基数排序法,//对单词各位(0—n-1)进行排序 for(i=0;i<a;i++){//对count个单词进行J位进排序桶 k=c[i][j]-97; if(k<0){k=0;} str[k][m++]=c[i]; } for(i=0,k=0;i<n&&k<26;k++)//按顺序回收排序桶 for(d=0;d<n;d++) if(str[k][d][0]>96&&str[k][d][0]<123||str[k][d][0]>64&&str[k][d][0]<91){//判断26各排序桶是否有单词 c[i++]=str[k][d]; str[k][d][0]=32; } m=0;}}intmain(){ inta,i; cout<<"请输入元素个数:"; cin>>a; stringc[10]; ifstreaminfile("file.txt",ios::in); if(!infile){ cout<<"openerror..."<<endl; exit(1); }else{ cout<<"openok....."<<endl; for(i=0;i<a;i++) infile>>c[i]; }radix(c,a); ofstreamoutfile("d:\\f1.txt",ios::out);//定义文件流对象,打开磁盘文件也可以更改其他路径if(!outfile)//如果打开失败,outfile返回0值{cerr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论