好文档 - 专业文书写作范文服务资料分享网站

数据结构课程设计57651

天下 分享 时间: 加入收藏 我要投稿 点赞

v1.0 可编辑可修改 排序综合

1.需求分析

任务描述

至少采用3种方法实现上述问题求解,并把排序后的结果保存在不同的文件中。

功能分析

显示随机数,是调用rand()函数输出数组a[]。数组a[]中保存有随机产生的随机数;直接选择排序,是通过n-1次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之;起泡排序,是如果有n个数,则要进行n-1趟比较,在 将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个排序中的记录“基本有序”时,在对全体记录进行一次直接插入排序;直接插入排序,是将一个记录插入到以排序好的有序表中,从而得到一个新的记录数增1的有序表。设整个排序有n个数,则 进行n-1趟排序,即:先将序列中的第一个记录看成一个有序的子序列,然后第2个记录起逐个进行插入,直接整个序列变成按关键字非递减有序列为止;快速排序,是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;堆排序,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heapify实现的。

2.概要设计

主要全程变量和数据结构

(1) 数据结构:

#include \ #include <> #define s 100

typedef struct record {int key;};

1

v1.0 可编辑可修改 static struct record a1[s],a2[s],a3[s],a4[s],a5[s],a6[s],rec; int a[7],b[7];file()

(2) 算法的入口及其说明 #include<>

#define s 100 直接插入排序 *** \\n\

printf(\希尔排序 *** \\n\ printf(\起泡排序 *** \\n\ printf(\快速排序 *** \\n\ printf(\简单选择排序 *** \\n\ printf(\堆排序 *** \\n\ printf(\总结 *** \\n\ printf(\退出 *** \\n\

printf(\ 以上printf(\为系统主菜单输出

程序模块结构

程序划分为以下几个模块(即实现程序功能所需的函数)

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

插入排序函数:InsertSort() 选择排序函数:StlectSort() 起泡排序函数:BubbleSort() 堆排序函数:heapsort() 快速排序函数:Quicksort() 希尔排序:Shell Sort()

2

v1.0 可编辑可修改 3.详细设计

程序的主要结构如下图所示。

图3-1函数调用关系图

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

数据结构定义

图3-2课程设计流程图

3

v1.0 可编辑可修改 显示各排序算法排序后的的数据。

图3-3程序工作流程图

函数实现(例如直接插入排序)

#include \

#include <> #define s 100

typedef struct record {int key;};

static struct record a1[s],a2[s],a3[s],a4[s],a5[s],a6[s],rec; int a[7],b[7]; file() {

printf(\ printf(\直接插入排序 *** \\n\ printf(\退出 *** \\n\

printf(\ void Straight_insert_sort(r,n) /*直接插入*/ struct record r[]; int n; { int i,j; a[1]=0;b[1]=0;

4

v1.0 可编辑可修改 for(i=1;i<=n;i++) printf(\ printf(\ for(i=2;i<=n;i++) { r[0]=r[i]; j=i-1;

while((j>=0) && (r[0].key

printf(\直接插入******************\\n\ for(i=1;i<=n;i++) printf(\ printf(\

printf(\ printf(\ }

4.调试分析

直接插入排序

将一个记录插入到已排好的有序表中,从而得到一个新的,记录数增加1的有序表

起泡排序

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,知道第N-1个和第N个记录的关键字进行过比较为止。上述为第一趟排序。其结果使得关键字的最大被安排到最后一个记录的位置上。然后进行第二趟起泡排序,对前N-1个记录进行同样操作。一共要进行N-1趟起泡排序。

直接选择排序

每一趟从待排序的记录中选出关键字最小的,顺序放在以排好序的子文件的最后,

5

数据结构课程设计57651

v1.0可编辑可修改排序综合1.需求分析任务描述至少采用3种方法实现上述问题求解,并把排序后的结果保存在不同的文件中。功能分析显示随机数,是调用rand()函数输出数组a[]。数组a[]中保存有随机产生的随机数;直接选择排序,是通
推荐度:
点击下载文档文档为doc格式
80yd16x9ur1ujtp7zqyg25ui718xn30190s
领取福利

微信扫码领取福利

微信扫码分享