教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 初中教育 >

排序算法应用二(直接法、插入法、shell排序)

来源:网络收集 时间:2026-09-11
导读: c++编程 河北工业大学计算机软件技术基础(VC)课程设计报告 一、题目: 排序算法应用二(直接法、插入法、shell排序)(10) 二、设计思路 1、总体设计: 1)要求:将一组无序数列分别通过直接法、插入法、shell排序按一定规律进行排序 ,并输出排序次数。 2

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字,全部文档内容请下载后查看。喜欢就下载吧 ……

排序算法应用二(直接法、插入法、shell排序).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1564006.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)