随机函数产生进行多种方法排序排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告

专业信息管理与信息系统

班级110513

姓名赵文龙

学号110513113

时间2013.12.12

课程设计:排序综合

一、任务描述

(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。

2) 统计每一种排序方法的性能(以上机运行程序所花费的时

间为准进行对比),找出其中两种较快的方法。

如果采用4 种或 4 种以上的方法者,可适当加分。

二、问题分析

1、功能分析

分析设计课题的要求,要求编程实现以下功能:

(1)显示随机数:调用Dip()函数输出数组a[]。数组a[]中保存有随机产生的随机数。

(2)直接选择排序:通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之。

(3)冒泡排序:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

(4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

(5)直接插入排序:将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。设整个排序有n个数,则进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序列为止。

(6)显示各排序算法排序后的的数据和时间效率,并比较找出其中2种较快的方法。

2、数据对象分析

排序方式:直接选择排序、冒泡排序、希尔排序、直接插入排序

显示排序后的的数据和时间效率。

三、数据结构设计

1.主要全程变量及数据结构

数据结构:

typedef struct

{

KeyType key;

InfoType otherinfo;

}RedType;

typedef struct

{

RedType r[MAXSIZE+1];

int length;

}SqList;

2.算法的入口参数及说明

#include

#define MAXSIZE 20

#define LT(a,b) ((a)<(b)) //宏定义

typedef int KeyType; //定义关键字KeyType为int

typedef int InfoType; //定义关键字InfoType为int

typedef struct{ //RedType结构定义

KeyType key;

InfoType otherinfo; //记录中其他信息域的类型

}RedType;

typedef struct{ //SqList结构定义

RedType r[MAXSIZE+1]; //定义大小

int length; //length为待排记录个数

}SqList;

四、功能设计

(一)主控菜单设计

为实现排序的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

程序运行后,给出11个菜单项的内容和输入提示,如下:

欢迎来到排序综合系统!

菜单

(1)---直接插入排序

(2)---直接选择排序

(3)---冒泡排序

(4)---快速排序

(5)---堆排序

(6)---时间效率比较

(7)---显示随机数

(0)---退出系统

请在上述序号中选择一个并输入:

(二)程序模块结构

由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数):

●主控菜单项选择函数menu_select()

●插入排序函数:InsertS ort()

●选择排序函数:SelectSort()

●冒泡排序函数:BubbleSort()

●堆排序函数:heapsort()

(三)函数调用关系

程序的主要结构(函数调用关系)如下图所示。

其中main()是主函数,它进行菜单驱动,根据选择项1~0调用相应的函数。

(四)函数实现

#include

#include

#include

#include

#include

#define N 30000

void Wrong()

{

printf("\n=====>按键错误!\n");

getchar();

}

void Disp(int a[])

{

int i;

system("cls");

for(i=0;i

{

if((i-1)%10==9)

printf("\n");

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

}

}

void InsertSort(int a[],int p) //插入排序

{

int i,j,temp;

for(i=1;i

{

temp=a[i];

for(j=i;j>0&&a[j-1]>temp;j--)

a[j]=a[j-1];

a[j]=temp;

}

}

void SelectSort(int a[],int p) //选择排序

{

int i,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(k!=i)

{

int temp;

temp=a[k];

a[k]=a[i];

a[i]=temp;

}

}

}

void BubbleSort(int a[],int p) /*冒泡排序算法*/ {

int i,j,temp;

for (i=0;i

{

相关文档
最新文档