程序设计大作业 排序

发布 2021-05-05 21:54:28 阅读 4500

《程序设计基础》大作业。

信息科学与工程学院。

22023年7月3日。

程序设计基础大作业。

数字的排列以及其排序过程的演示。

1.1 需求陈述:

数字排列方法是多样的,如插入法,冒泡法,选择排序,shell排序等;而这些排序方法的思路大不相同。因此本程序是将数字的排序过程以图像的方式展示出来,以方便他人学习。

1.2 需求分析 :

1.2.1:功能需求:

1.3 设计思想:

1 、函数库调用。

#include<>

程序内容的输入输出。

#include<>

实现时间控制。

#include<>

取得随机数。

#include<>

实现清屏。2、子函数的设计。

a、冒泡排序子函数。

声明:int maopao( int *a,int n)

功能:用冒泡法对数组中的元素进行排列,并将其中的比较,以及交换的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。

实现思路:由第一个数开始,每个数依次同其下一个数字比较并根据大小进行交换。根据数组的大小确定循环次数。

最终实现数组中的元素排序。其中,使数组中的元素以图像的形式展示出来。并对正在比较的元素用特殊符号标记。

用+组成正在比较的数字,用-组成其他数字。

b、选择法子函数。

声明:int xuanze(int *a,int n)

功能:用选择排序法对数组中的元素进行排列,并将其中的比较,以及交换的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。

实现思路:由第一个数开始,第一个数依次与所有数比较。找到最小数,放在第一位。再从第二个数开始进行比较找到剩下数中最小数。以此类推,从而实现对所有的数字排序。

c、插入法子函数。

声明:int charu(int *a,int n)

功能:用插入排序法对数组中的元素进行排列,并将其中的比较,以及插入的次数输出。最终完成比较,以递增的顺序将排列好的数组输出。

实现思路:每个数依次和后面的数比较,根据大小关系,决定所要插入的位置,要插入位置及以后的数字分别后移一位,再用要插入的数进行赋值。

d、shell排序子函数。

声明:void shell(int *a,int n)

功能:在本程序中,选用了元素的个数的一半作为分组的依据。首先将数组分组并用#显示出分组情况,再在每一组之间将相同位置的数字进行比较对换,显示出第几组与第几组的第几个元素在进行比较对换,以后进行多次分组,每一次都按照相同的方法进行比较对换,当每组中的元素成为壹时,进行最后一轮比较对换,再将最后的数组输出。

3、主函数的设计:

主函数中运用switch语句使用户对不同情况做出选择,运用while语句作为错误检测,当选择错误时可以再次选择,在屏幕菜单输出时运用空格是屏幕美观化。

1.4系统测试显示及思想。

1.41、进入界面;

注释:在此完成对系统的选择(由于检测需求,需要在不同系统中运行。)

注释:要求先输入要排序的数组中个数;此选项用简单的输出和输入完成。

注释:输入数组是用一个for循环输入,而产生随机数则是用时间做种子,再对数字取余得到。

当选择自主输入数字时,所显示的为当前界面。

注释:简单的switch语句,中间没有加了default。

default只能提示一次,如果用循环提示出错则可以多次改正,并提示。

如果输入有误;

1.42、冒泡法运行时的界面;

注释:比较次数和交换次数,用两个变量就可以,只是比较次数放在双重循环之后,而交换次数放在if判断语句之后。

冒泡结束时;

1.43、选择排序运行;

选择结束时;

1.44、插入法运行。

不需要插入时。

当需要插入时(括号中为刚插入的数字);

插入法运行结束时。

1.45、shell排序法运行时。

排序过程中输出每组的个数,正在比较的组数以及组中的第几个数正在比较。

当单个数字为一组时,表示函数即将运行完毕,1.5程序设计及部分说明。

1、主函数;

srand(time(null));时间种子。

for(i=0;i<10;i++)

a[i]=rand()%10+1;循环赋值。

注释:运用时间取随机数。

while(q<1||q>5)

注释:运用while语句实现输入错误的检查,及错误的再次输入更正。

2、冒泡子函数;

分析;1、 其中bijiao,jiaohuanle两个变量是为记录比较次数和交换次数。

2、 输出中i-->i+1是为了具体指出正在比较的数字。

3、 sleep(1000)控制时间延时1秒;system(“cls”);实现清屏。

4、 输出时用空格对输出控制,是界面整洁。

5、 相邻的两个数比较,当符合条件就引入第三个变量进行交换;

6、 双重循环使得每一个数都能完成比较。

3、选择法子函数;

for(i=0;i<9-j;i++)

bijiao;//比较次数记录。

if(a[i]>a[i+1])

t=a[i];a[i]=a[i+1];a[i+1]=t;++jiaohuan;//数字比较、交换。

for (l=0;l<10;l++)

printf("a[%d]",l);

if (l==i||l==j)//用if控制不同的字符输出。

printf(" i-->j");

for(m=0;mprintf ("用不同的符号加以区别。

printf("");

elseprintf空格控制界面显示。

for(m=0;mprintf("-

printf("");

printf("n");

printf("比较%d次交换%d次",bijiao,jiaohuan );

printf("");

sleep(1000);

system("cls");

printf("比较%d次交换%d次",bijiao,jiaohuan );

for (l=0;l<10;l++)

for(i=0;i<10;i++)

printf("%d ",a[i]);

7、 插入法子函数。

利用两个for语句套用使插入法简洁;

for(i=1;i;

用if语句判断程序是否做了数字的插入。if

i!=j)else

printf("不做插入");

8、 shell排序法子函数。

将数组进一步分组for(r=n/2;r>=1;r/= 2), 在此程序中以数组元素个数的一半作为分组依据,for(i=r;i

注释:在循环中对已经分好的组中的对应元素进行直接插入,此处与插入法略有相似。

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个数进行比较",r);

elseprintf("第%d个数进行比较",(i-r+1)%r);

注释:利用余数对正在比较的数进行提示,并进行判断,当余数为0时,输出组中元素个数。

总注释:在每一个子函数中。

if(xitong==1)

sleep(1000);

system("cls");

else {for(b=0;b<100000;b++)

for(p=0;p<100000;p++)

程序设计大作业

总的时间 32学时 学分 2。时间 20140616 20140627 地址 3教405教室。一 从给定的程序 文件包中,选择一个源程序做详细标注。目的 熟悉matlab程序 二 能够利用matlab熟悉地画图,内容包括 x y坐标轴上的label,每幅图上的title,绘画多条曲线时的legend...

程序设计大作业 C

摘要。题目 编写查找算法的演示程序 算法型大作业 编写程序实现某班期末考试成绩及有关学生信息的查找并将查询结果写入某文件中。其中输入可来自某文件 比如 xls 注意 编写的程序必须实现以下查找功能 1.输入某同学的学号或姓名 无重名 若存在,则输出该同学的成绩 否则输出 不存在 2.统计不及格人数并...

游戏程序设计大作业

仙剑奇侠传4 游戏的分析和评价。段强 03091439 一 基本信息。2.激活码版 50.00元,实体版79元。3.最低配置 推荐配置。二 概要信息。1.简要概述。仙剑奇侠传四 是角色扮演游戏 仙剑奇侠传 系列的 作品,由大宇资讯旗下的软星科技 上海 制作,于2007年8月1日发行。故事的起点始于黄...