程序设计大作业——排序.doc

上传人:cl****1 文档编号:561632042 上传时间:2023-03-17 格式:DOC 页数:10 大小:134.50KB
返回 下载 相关 举报
程序设计大作业——排序.doc_第1页
第1页 / 共10页
程序设计大作业——排序.doc_第2页
第2页 / 共10页
程序设计大作业——排序.doc_第3页
第3页 / 共10页
程序设计大作业——排序.doc_第4页
第4页 / 共10页
程序设计大作业——排序.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《程序设计大作业——排序.doc》由会员分享,可在线阅读,更多相关《程序设计大作业——排序.doc(10页珍藏版)》请在金锄头文库上搜索。

1、程序设计基础大作业姓 名:张彬学 号:1001051135班 级:信管10-01成 绩:信息科学与工程学院20011年7月3日程序设计基础大作业数字的排列以及其排序过程的演示1.1 需求陈述:数字排列方法是多样的,如插入法,冒泡法,选择排序,shell排序等;而这些排序方法的思路大不相同。因此本程序是将数字的排序过程以图像的方式展示出来,以方便他人学习。1.2 需求分析 :1.2.1:功能需求:项目功能组成备注Order主函数不同系统的选择选择需要的排序方法在主函数每一次选择时都允许多次选择错误,只要没有输入正确的选项就会一直执行输入操作数组的产生方式选择需要的排序方法选择错误的检测子函数的调

2、用子函数(冒泡,选择)相邻的数字依次比较 根据大小进行交换循环并记录交换结果 交换过程用图形展示子函数(插入)数字比较数字移位数字插入图形展示子函数(shell)将数组元素多次分组每一次分组后都进行比较交换数字每次输出,并提示分组情况及比较情况1.3 设计思想:1 、函数库调用#include程序内容的输入输出#include实现时间控制#include取得随机数#include实现清屏2、子函数的设计A、冒泡排序子函数声明:int maopao( int *a,int n)功能:用冒泡法对数组中的元素进行排列,并将其中的比较,以及交换的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。

3、实现思路:由第一个数开始,每个数依次同其下一个数字比较并根据大小进行交换。根据数组的大小确定循环次数。最终实现数组中的元素排序。其中,使数组中的元素以图像的形式展示出来。并对正在比较的元素用特殊符号标记。用+组成正在比较的数字,用-组成其他数字。B、选择法子函数声明:int xuanze(int *a,int n)功能:用选择排序法对数组中的元素进行排列,并将其中的比较,以及交换的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。实现思路:由第一个数开始,第一个数依次与所有数比较。找到最小数,放在第一位。再从第二个数开始进行比较找到剩下数中最小数。以此类推,从而实现对所有的数字排序。C、

4、插入法子函数声明:int charu(int *a,int n)功能:用插入排序法对数组中的元素进行排列,并将其中的比较,以及插入的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。实现思路:每个数依次和后面的数比较,根据大小关系,决定所要插入的位置,要插入位置及以后的数字分别后移一位,再用要插入的数进行赋值。 D、shell排序子函数声明:void shell(int *a,int n)功能:在本程序中,选用了元素的个数的一半作为分组的依据。首先将数组分组并用#显示出分组情况,再在每一组之间将相同位置的数字进行比较对换,显示出第几组与第几组的第几个元素在进行比较对换,以后进行多次分组,

5、每一次都按照相同的方法进行比较对换,当每组中的元素成为壹时,进行最后一轮比较对换,再将最后的数组输出3、主函数的设计:主函数中运用switch语句使用户对不同情况做出选择,运用while语句作为错误检测,当选择错误时可以再次选择,在屏幕菜单输出时运用空格是屏幕美观化。1.4系统测试显示及思想1.41、进入界面;注释:在此完成对系统的选择(由于检测需求,需要在不同系统中运行。) 注释:要求先输入要排序的数组中个数;此选项用简单的输出和输入完成。注释:输入数组是用一个for循环输入,而产生随机数则是用时间做种子,再对数字取余得到当选择自主输入数字时,所显示的为当前界面。注释:简单的switch语句

6、,中间没有加了default。Default只能提示一次,如果用循环提示出错则可以多次改正,并提示。如果输入有误;1.42、冒泡法运行时的界面;注释:比较次数和交换次数,用两个变量就可以,只是比较次数放在双重循环之后,而交换次数放在if判断语句之后。冒泡结束时;1.43、选择排序运行;选择结束时;1.44、插入法运行;不需要插入时当需要插入时(括号中为刚插入的数字);插入法运行结束时1.45、shell排序法运行时排序过程中输出每组的个数,正在比较的组数以及组中的第几个数正在比较当单个数字为一组时,表示函数即将运行完毕,1.5程序设计及部分说明1、主函数;srand(time(NULL);/时

7、间种子for(i=0;i10;i+)ai=rand()%10+1;循环赋值注释:运用时间取随机数while(q5) printf(请选择正确的选项数字:n); scanf(%d,&q); 注释:运用while语句实现输入错误的检查,及错误的再次输入更正。2、冒泡子函数;分析;1、 其中bijiao,jiaohuanle两个变量是为记录比较次数和交换次数。2、 输出中i-i+1是为了具体指出正在比较的数字。3、 Sleep(1000)控制时间延时1秒;system(“cls”);实现清屏4、 输出时用空格对输出控制,是界面整洁。5、 相邻的两个数比较,当符合条件就引入第三个变量进行交换;6、 双

8、重循环使得每一个数都能完成比较。3、选择法子函数; for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t;+jiaohuan;/数字比较、交换 for (l=0;lj); for(m=0;mal;m+) printf (+);/用不同的符号加以区别 printf(n); else printf ( );空格控制界面显示 for(m=0;mal;m+)/利用循环控制图形长度 printf(-);printf(n);printf(n*n); printf(比较%d次 交换%d次n,bijiao,jiaohuan ); /printf(n); Sleep(1000); system(

9、cls); printf(比较%d次 交换%d次n,bijiao,jiaohuan ); for (l=0;l10;l+)/ printf ( );/ for(m=0;mal;m+)/最后对结果图像输出 printf (-);/ printf(n);/ for(i=0;i10;i+)/printf(%d ,ai);/7、 插入法子函数利用两个for语句套用使插入法简洁;for(i=1;in;i+)t=ai;j=i;for(;t0;j-) aj=aj-1;aj=t;;用if语句判断程序是否做了数字的插入。if (i!=j)printf(n第%d位插入到第%d位,同时后%d位数字后移n,i+1,j

10、+1,n-j-1);+charu; else printf(n不做插入n);8、 shell排序法子函数将数组进一步分组for(r=n/2;r=1;r/= 2), 在此程序中以数组元素个数的一半作为分组依据,for(i=r;i=0 & taj)/对交换的条件进行限制, aj+r=aj; j-=r; aj+r=t;注释:在循环中对已经分好的组中的对应元素进行直接插入,此处与插入法略有相似。printf(第%d组同第%d组的,l,l+1);l+;if (l=n/r) l=1;注释:引入新变量对正在比较的组进行提示,当一组结束后,对变量进行初始化。如果改为printf(第%d组同第%d组的,l+,l);if (l=n/r) l=1;则更为简介,然而编译器的运行中提示为“警告”if(i-r+1)%r=0)printf(第%d个数进行比较n,r);else printf(第%d个数进行比较n,(i-r+1)%r);注释:利用余数对正在比较的数进行提示,并进行判断,当余数为0时,输出组中元素个数。总注释:在每一个子函数中if(xitong=1) Sleep(1000); system(cls); else for(b=0;b100000;b+) for(p=0;p100000;p+) xitong+; system(clear);都运用该选择使得程序能在不同系统中运用,延时和清屏两个命令。1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号