排序算法应用二(直接法、插入法、shell排序)
c++编程
河北工业大学计算机软件技术基础(VC)课程设计报告
一、题目:
排序算法应用二(直接法、插入法、shell排序)(10)
二、设计思路
1、总体设计:
1)要求:将一组无序数列分别通过直接法、插入法、shell排序按一定规律进行排序 ,并输出排序次数。
2)系统总体结构:
本设计有五个函数和一个头文件组成,五个函数分别为:
主函数(主要负责循环方式选择,和定义)。
赋值函数(对数组进行赋值)。
插入循环函数(完成插入的循环函数制定)。
直接循环循环(完成直接的循环函数制定)。
Shell循环函数(完成Shell的循环函数制定)。
头文件将函数说明与主函数组和。
2、各功能模块的设计:首先设计主函数,再分别设计直接法、插入法、shell排序及赋值函数作为分函数,最后通过头文件将它们与主函数结合,使输入的一组无序数列分别通过直接法、插入法、shell排序按一定规律进行排序 ,并输出排序次数。从而完成数列的排序和排序方法的比较。
3、设计中的主要困难及解决方案:
困难一:数列的赋值?
解决方法:用函数实现。
困难二:如何进行排序比较?
解决方法:分别通过直接法、插入法、shell排序进行排序,使其按一定规律,并输出次数。
4、你所设计的程序最终完成的功能
1)将一组无序数列通过排序使其成为有序数列。
2)准备的测试数据:2 6 1 8 4 9 5
运行结果:
第1页/共5 页
c++编程
三、程序清单
本程序包含main.cpp、charu.cpp、zhijie.cpp、shell.cpp、fuzhi.cpp、和paixu.h六个文件
1、main.cpp文件清单
#include <iostream.h> //主函数
#include "paixu.h"
void main ()
{
int a[100],b[100],n,o,p,q,i;
char c;
for(int flag=1;flag!=0;)
{
cout<<"请输入数列个数:";
cin>>n;
fuzhi(a,n);
for(i=0;i<n;i++)
b[i]=a[i];
q=shell(a,n); //进入Shell法循环
cout<<"---------------------------";
cout<<"\n使用Shell排序法排序后的数据:"<<endl;
for(int y=0;y<n;y++) //数列输出
cout<<a[y]<<'\t';
cout<<"\n排序次数为:"<<q<<endl; //输出循环次数
for(i=0;i<n;i++) //将a复原
a[i]=b[i];
第2页/共5 页
c++编程
p=zhijie(a,n); //进入直接法循环
cout<<"---------------------------";
cout<<"\n使用直接排序法排序后的数据:"<<endl;
for(int w=0;w<n;w++) //数列输出
cout<<a[w]<<'\t';
cout<<"\n排序次数为:"<<p<<endl; //输出循环次数
for(i=0;i<n;i++) //将a复原
a[i]=b[i];
o=charu(a,n); //进入插入法循环
cout<<"---------------------------";
cout<<"\n使用插入排序法排序后的数据:"<<endl;
for(int s=0;s<n;s++) //数列输出
cout<<a[s]<<'\t';
cout<<"\n排序次数为:"<<o<<endl; //输出循环次数
cout<<"是否继续查找?Y/N"<<endl;
cin>>c;
if(c=='N'||c=='n')
flag=0; //数据的循环
}
}
2、charu.cpp文件清单
int charu(int a[],int n) //插入循环
{ int i,j,min,temp,o=0;
for(i=0;i<n-1;i++)
{ min=i;
for(j=i+1;j<n;j++) //循环比较
{ if(a[j]>a[min])
min=j;
}
if(min!=i) //交换
{
o+=1;
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
return o;
}
3、zhijie.cpp文件清单
int zhijie(int a[],int n) //直接循环
{
int t,p=0; 编号:10
第3页/共5 页
c++编程
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if (a[j]>a[i]) //比较及交换
{
p+=1;
t=a[j];
a[j]=a[i];
a[i]=t;
}
return p;
}
4、shell.cpp文件清单
int shell(int a[],int n) //shell循环
{
int H,I,t,q=0;
for (H=n/2;H>0;H--)
{
for (I=0;I<n-H;I++)
{
if (a[I]<a[I+H]) //比较及交换
{ q+=1;
t=a[I];
a[I]=a[I+H];
a[I+H]=t;
}
}
}
return q;
}
5、fuzhi.cpp文件清单
#include <iostream.h> //赋值函数
void fuzhi(int a[],int n)
{ cout<<"请输入"<<n<<"个数:"<<endl; //输入数列个数
for(int i=0;i<n;i++)
{ int j=i+1;
cout<<"现在是第"<<j<<"个数:";
cin>>a[i]; //输入数列
}
}
6、paixu.h文件清单
int shell(int a[],int n); //Shell排序函数说明
int charu(int a[],int n); //插入排序函数说明
int zhijie(int a[],int n); //直接排序函数说明
void fuzhi(int a[],int n); //赋值函数说明 编号:10
第4页/共5 页
c++编程
编号:10
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
答:能够完成基本要求并完成多文件创新,但还有诸多不足之处,有待改正。
2、对课题提出更完善的方案
答:使整个程序都可循环,用不同的数据进行多次排序,即可以使程序进行多次不同的比较,减少工作量。
五、收获及心得体会
1、三次比较的优劣性:
答:通过利用此程序循环进行的多次比较,我发现插入排序循环次数最少,用时最短,所以插入排序比较高效。
2、通过本次课程设计,自己在哪些方面的能力有所提高?
答:通过本次课程设计,我在独立完成编程,C++语言进行程序设计,函数的运用,及排序算法等方面都有了提高。
3、 收获和心得体会?
答:通过本次程序的设计,培养了我综合利用C++语言进行程序设计的能力,加强函数的运用及对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,掌握排序算法,使我能够 …… 此处隐藏:1094字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)




