资源描述
攀枝花学院
学生课程设计(论文)
题 目: 多种排序
学生姓名: 甘双丰 学 号: 10803007
所在院(系): 计算机学院
专 业: 级网络工程
班 级: 级一班
指 导 教 师: 陈三清 职称: 讲师
6 月 13 日
攀枝花学院教务处制
攀枝花学院本科学生课程设计任务书
题 目
多种排序
1、课程设计目标
(1)巩固和加深学生对C语言课程基础知识了解和掌握;
(2)掌握C语言编程和程序调试基础技能;
(3)利用C语言进行简单软件设计基础思绪和方法;
(4)提升利用C语言处理实际问题能力。
2、课程设计内容和要求(包含原始数据、技术要求、工作要求等)
[问题描述]:用程序实现对一组数据排序,分别使用选择、冒泡和插入排序方法
[基础要求]:1、能够选择按从小到大次序排列,也能够选择从大到小次序排列;
2、显示最好情况下及最坏情况下数据交换次数;
3、能够选择一个方法排序,也能够同时选择两种及两种以上方法排序;
4、输出每一个选择后排序输出结果。
3、关键参考文件
[1] 潭浩强,《C程序设计》,清华大学出版社
[2] 王声决,《C语言程序设计》,中国铁道出版社
[3] 潭浩强,《C程序设计题解和上机指导》,清华大学出版社
[4] 刘玲等,《C语言程序设计应用教程》,西南师范大学出版社
4、课程设计工作进度计划
[1] 潭浩强,《C程序设计》,清华大学出版社
[2] 王声决,《C语言程序设计》,中国铁道出版社
[3] 潭浩强,《C程序设计题解和上机指导》,清华大学出版社
[4] 刘玲等,《C语言程序设计应用教程》,西南师范大学出版社
指导老师(签字)
日期
年 月 日
教研室意见:
年 月 日
学生(签字):
接收任务时间: 年 月 日
注:任务书由指导老师填写。
课程设计(论文)指导老师成绩评定表
题目名称
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,含有良好科学工作态度。
02
科学实践、调研
7
经过试验、试验、查阅文件、深入生产实践等渠道获取和课程设计相关材料。
03
课题工作量
7
按期圆满完成要求任务,工作量饱满。
能力
水平
35%
04
综合利用知识能力
10
能利用所学知识和技能去发觉和处理实际问题,能正确处理试验数据,能对课题进行理论分析,得出有价值结论。
05
应用文件能力
5
能独立查阅相关文件和从事其它调研;能提出并很好地叙述课题实施方案;有搜集、加工多种信息及获取新知识能力。
06
设计(试验)能力,方案设计能力
5
能正确设计试验方案,独立进行装置安装、调试、操作等试验工作,数据正确、可靠;研究思绪清楚、完整。
07
计算及计算机应用能力
5
含有较强数据运算和处理能力;能利用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或试验结果分析能力(综合分析能力、技术经济分析能力)
10
含有较强数据搜集、分析、处理、综合能力。
结果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或要求要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,叙述充足,结论严谨合理;试验正确,分析处理科学。
11
创新
10
对前人工作有改善或突破,或有独特见解。
成绩
指导老师评语
指导老师署名: 年 月 日
目 录
摘要……………………………………………………………………………………5
1 问题描述……………………………………………………………………………6
1.1 基础要求………………………………………………………………………6
2 概要设计……………………………………………………………………………7
2.1 系统模块划分及定义……………………………………………………………7
2.2 步骤图…………………………………………………………………………7
2.3 算法思想………………………………………………………………………8
3 具体设计…………………………………………………………………………9
3.1 选择排序源代码…………………………………………………………………9
3.2插入排序源代码…………………………………………………………………9
3.3冒泡排序源代码…………………………………………………………………10
4调试分析…………………………………………………………………………12
5测试结果…………………………………………………………………………13
6 总结………………………………………………………………………………14
参考文件……………………………………………………………………………15
摘要
排序是计算机程序设计中一个关键操作,在数据处理中占有极其关键位置。有资料表明,在当今计算机系统中,CPU有50%以上处理时间是用在数据排序上[1]。排序有很多个,如插入排序、交换排序、选择排序、归并排序等。而选择法排序是其中一个比较简单而有效排序方法,也是C语言中一维数组经典算法。所以我们不得不熟练掌握选择排序法。
1. 问题描述
用程序实现对一组数据排序,分别使用选择、冒泡和插入排序方法
冒泡算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果位置,确定元素位置次序是从后往前,其它元素可能作相对位置调整。能够进行升序或降序排序。
选择算法特点:每趟是选出一个最值确定其在结果序列中位置,确定元素位置是以前往后,而每趟最多进行一次交换,其它元素相对位置不变。可进行降序排序或升序排序。
插入算法特点:每趟从无序序列中取出第一个数插入到有序序列适宜位置,元素最终位置在最终一趟插入后才能确定位置。也可是先用循环查找插入位置(可以前往后或从后往前),再将插入位置以后元素(有序列中)逐一后移一个位置,最终完成插入。该算法特点是在寻求插入位置同时完成元素移动。因为元素移动必需从后往前,则可将两个操作结合在一起完成,提升算法效率。仍可进行升序或降序排序。
1.1基础要求
能够选择按从小到大次序排列,也能够选择从大到小次序排列;
显示最好情况下及最坏情况下数据交换次数;
能够选择一个方法排序,也能够同时选择两种及两种以上方法排序;
输出每一个选择后排序输出结果。
2. 概要设计
2.1系统模块划分及定义
Include<stdio.h>,头文件,功效是对函数进行申明。
main,主函数,功效是作为程序入口并实现对问题处理。
a[],数组,功效是方便对main函数中数据进行对应处理运算。
for(,,,)语句,功效是对main函数中数据进行循环比较。
scanf,printf,数据库函数,功效分别是输入原始数据,输出运行结果。
2.2步骤图
图 2.2.1-1 选择排序步骤图
图 2.2.1-2 插入排序步骤图 图 2.2.1-3 冒泡排序步骤图
2.3算法思想
选择排序(Selection Sort)基础思想是:每一趟从待排序统计中选出关键字最小统计,次序放在已排好序子文件最终,直到全部统计排序完成。
插入排序(Insertion Sort)基础思想是:每次将一个待排序统计,按其关键字大小插入到前面已经排好序子文件中合适位置,直到全部统计插入完成为止。
交换排序基础思想是:两两比较待排序统计关键字,发觉两个统计次序相反时即进行交换,直到没有反序统计为止。
3. 具体设计
3.1 选择排序源代码
# include <stdio.h>
main()
{
int a[10],i,j,k,t,n=10;
int count=0;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循环控制趟数,n个数选n-1趟*/
{
k=i; /*假设目前趟第一个数为最值,记在k中 */
for(j=i+1;j<n;j++) /*从下一个数到最终一个数之间找最值*/
if(a[k]<a[j]) /*若其后有比最值更大*/
k=j; /*则将其下标识在k中*/
if(k!=i) /*若k不为最初i值,说明在其后找到比其更大数*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*则交换最值和目前序列第一个数*/
count++;
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
printf("%d\n",count);
}
3.2插入排序源代码
# include <stdio.h>
main()
{
int a[10],i,j,t,count=0;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循环控制趟数,n个数从第2个数开始到最终共进行n-1次插入*/
{
t=a[i]; /*将待插入数暂存于变量t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下标0 ~ i-1)中寻求插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,则目前元素后移一个位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
count++;
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
printf("%d\n",count);
}
3.3冒泡排序源代码:
#include<stdio.h>
main()
{
int i,j,temp,count=0;
int a[10];
for(i=0;i<10;i++)
scanf ("%d",&a[i]);
for(j=0;j<10;j++)
{ for (i=0;i<10-j;i++)
if (a[i]<a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
count++;
}
for(i=0;i<10;i++)
printf("%5d",a[i] );
printf("\n");
printf("交换次数:%d\n",count);
}
4. 调试分析
4.1调试分析:
输入参数:9 6 4 7 8 2 0 1 5 3
理论排序:9 8 7 6 5 4 3 2 1 0
理论排序次数:选择排序 9 次
插入排序 9 次
冒泡排序 10次
5. 测试结果
5.1运行结果截图:
图 5.1-1 选择排序运行结果截图
图 5.1-2 插入排序运行结果截图
图 5.1-3 冒泡排序运行结果截图
6. 总结
这次程序设计试验是对我们进入大学以来学习程序设计语言结果一次大检验。自己动手,自己发觉和处理问题。发觉了自己很多不足。平时没有掌握好知识在这次试验中根本暴露出来,经过不停思索,不停查阅资料和上机运行,处理其中大部分问题,当然还存在部分问题没有处理。我相信在以后学习能够处理好它们。不过,收获还是不小,我不仅对C操作有了深入掌握,还了解到了程序设计书写风格及其注释格式。
经过此次试验巩固和加深了对C语言课程基础知识了解和掌握;基础掌握了C语言编程和程序调试基础技能;学会了利用C语言进行简单软件设计基础思绪和方法;显著提升了利用C语言处理实际问题能力。为以后学习c语言及其它相关课程打下了坚实基础,对以后学习生活起到了很大帮助。
参考文件
[1] 潭浩强,《C程序设计》,清华大学出版社
[2] 王声决,《C语言程序设计》,中国铁道出版社
[3] 潭浩强,《C程序设计题解和上机指导》,清华大学出版社
[4] 刘玲等,《C语言程序设计应用教程》,西南师范大学出版社
展开阅读全文