数据结构课程设计排序实验报告

合集下载

数据结构排序实验报告

数据结构排序实验报告

《数据结构》课程设计报告

实验五排序

一、需求分析:

本演示程序用C++6.0编写,完成各种排序的实现,对输入的一组数字实现不同的排序方法,对其由小到大顺序输出。

(1)分别对直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序算法进行编写。

(2)、对存储的函数即输入的数字进行遍历。

(3)、初始化函数对输入的数字进行保存。

(4)、主函数实现使用者操作界面的编写,对输入、选择、保存、输出的各种实现。这当中还包括了各个函数的调用的实现。

(5)、程序所能达到的功能:完成对输入的数字的生成,并通过对各排序的选择实现

数字从小到大的输出。

二、程序主要功能以及基本要求:

(1)、设计一个菜单,格式如下:

1、直接插入排序

2、希尔排序

3、冒泡排序

4、快速排序

5、选择排序

6、堆排序

7、退出

(2)、选择不同的菜单但进行相应的排序,并给出排序的关键字序列。

三、系统框架图:

本程序包含了9个函数,它们分别是:

(1)、直接插入排序的算法函数InsertSort()。

(2)、希尔排序的算法函数ShellSort()。

(4)、快速排序的算法函数Partition()。

(5)、选择排序算法函数SelectSort()。

(6)、堆排序算法函数HeapAdjust()。

(7)、对存储数字的遍历函数Visit()。

(8)、初始化函数InitSqList()。

(9)、主函数main()。

四、详细设计

实现各个算法的主要内容,下面是各个函数的主要信息:

(1)各个排序函数的算法:

一、直接插入排序

void InsertSort(SqList &L)

数据结构课程设计-排序

数据结构课程设计-排序

一、问题描述

1、排序问题描述

排序是计算机程序设计的一种重要操作,他的功能是将一组任意顺序数据元素(记录),根据某一个(或几个)关键字按一定的顺序重新排列成为有序的序列。简单地说,就是将一组“无序”的记录序列调整为“有序”的记录序列的一种操作。

本次课程设计主要涉及几种常用的排序方法,分析了排序的实质,排序的应用,排序的分类,同时进行各排序方法的效率比较,包括比较次数和交换次数。我们利用java语言来实现本排序综合系统,该系统包含了:插入排序、交换排序、选择排序、归并排序。其中包括:

(1)插入排序的有关算法:不带监视哨的直接插入排序的实现;

(2)交换排序有关算法:冒泡排序、快速排序的实现;

(3)选择排序的有关算法:直接选择排序、堆排序的实现;

(4)归并排序的有关算法:2-路归并排序的实现。

2、界面设计模块问题描述

设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。

二、问题分析

本人设计的是交换排序,它的基本思想是两两比较带排序记录的关键字,若两个记录的次序相反则交换这两个记录,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有冒泡排序和快速排序。

冒泡排序的基本思想是:将待排序的数组看作从上到下排列,把关键字值较小的记录看作“较轻的”,关键字值较大的纪录看作“较重的”,较小关键字值的记录好像水中的气泡一样,向上浮;较大关键字值的纪录如水中的石块向下沉,当所有的气泡都浮到了相应的位置,并且所有的石块都沉到了水中,排序就结束了。

数据结构排序实验报告

数据结构排序实验报告

数据结构排序实验报告

数据结构排序实验报告

引言:

数据结构是计算机科学中的重要概念之一,它涉及到数据的组织、存储和操作

方式。排序是数据结构中的基本操作之一,它可以将一组无序的数据按照特定

的规则进行排列,从而方便后续的查找和处理。本实验旨在通过对不同排序算

法的实验比较,探讨它们的性能差异和适用场景。

一、实验目的

本实验的主要目的是通过实际操作,深入理解不同排序算法的原理和实现方式,并通过对比它们的性能差异,选取合适的排序算法用于不同场景中。

二、实验环境和工具

实验环境:Windows 10 操作系统

开发工具:Visual Studio 2019

编程语言:C++

三、实验过程

1. 实验准备

在开始实验之前,我们需要先准备一组待排序的数据。为了保证实验的公正性,我们选择了一组包含10000个随机整数的数据集。这些数据将被用于对比各种

排序算法的性能。

2. 实验步骤

我们选择了常见的五种排序算法进行实验比较,分别是冒泡排序、选择排序、

插入排序、快速排序和归并排序。

- 冒泡排序:该算法通过不断比较相邻元素的大小,将较大的元素逐渐“冒泡”到数组的末尾。实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。

- 选择排序:该算法通过不断选择数组中的最小元素,并将其放置在已排序部分的末尾。实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。

- 插入排序:该算法将数组分为已排序和未排序两部分,然后逐个将未排序部分的元素插入到已排序部分的合适位置。实现时,我们使用了循环和条件判断来找到插入位置,并通过移动元素的方式进行排序。

大数据结构课程设计-排序算法比较【完整版】

大数据结构课程设计-排序算法比较【完整版】

XXXXXX大学《数据结构》课程设计报告

目录

排序算法比较

一、需求分析

二、程序的主要功能

三、程序运行平台

四、数据结构

五、算法及时间复杂度

六、测试用例

七、程序源代码

二感想体会与总结

排序算法比较

一、需求分析

利用随机函数产生N个随机整数(N = 500,1000,1500,2000,2500,…,30000),利用直接插入排序、折半插入排序,起泡排序、快速排序、选择排序、堆排序,基数排序七种排序方法(可添加其它排序方法)进行排序(结果为由小到大的顺序),并统计每一种排序所耗费的时间(统计为图表坐标形式)。

二、程序的主要功能

1.用户输入任意个数,产生相应的随机数

2.用户可以自己选择排序方式(直接插入排序、折半插入排序、起泡排序、快速排序、选择排序、堆排序、基数排序)的一种

3.程序给出原始数据、排序后从小到大的数据,并给出排序所用的时间。

三、程序运行平台

Visual C++ 版本

四、数据结构

本程序的数据结构为线形表,线性顺序表、线性链表。

1、结构体:

typedef struct

{

接插入排序

3、系统将随机数排序后整齐的显示出来。

4、用户可以选择继续排序或者退出系统。

七、程序源代码

/********************************************************************************* *************

第六题:排序算法比较

设计要求:利用随机函数产生N个随机整数(N = 500,1000,1500,2000,

2500,…,30000),

数据结构各种排序实验报告

数据结构各种排序实验报告

目录

1.引言............................................................................................................................ 错误!未定义书签。

2.需求分析.................................................................................................................... 错误!未定义书签。

3.详细设计.................................................................................................................... 错误!未定义书签。

3.1 直接插入排序................................................................................................ 错误!未定义书签。

3.2折半排序......................................................................................................... 错误!未定义书签。

3.3 希尔排序........................................................................................................ 错误!未定义书签。

数据结构实验报告-排序

数据结构实验报告-排序

本章共8道实验题目。

一、直接插入排序

1. 定义顺序表的存储结构

2. 初始化顺序表为空表

3. 输入10个元素创建含有10个元素的顺序表

4. 输出顺序表

5. 对顺序表进行直接插入排序(InsertSort)

6. 输出排序后的顺序表

例如:

11 938 669 507 117 261 708 343 300 602

11 938 669 507 117 261 708 343 300 602

11 117 261 300 343 507 602 669 708 938

程序:

#include <iostream>

#include <algorithm>

using namespace std;

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

#define MAXSIZE 100

typedef int KeyType;

typedef char InfoType[256];

typedef struct

{

KeyType key;

InfoType otherinfo;

}RedType;

typedef struct

{

RedType r[MAXSIZE+1];

int length;

}SqList;

//此处定义直接插入排序函数

int a[20];

int main()

{

int InsertSort;

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

{

cin >> a[i];

cout << a[i] << " ";

数据结构实验报告排序

数据结构实验报告排序

数据结构实验报告排序

数据结构实验报告:排序

引言:

排序是计算机科学中常见的算法问题之一,它的目标是将一组无序的数据按照特定的规则进行排列,以便于后续的查找、统计和分析。在本次实验中,我们将学习和实现几种常见的排序算法,并对它们的性能进行比较和分析。

一、冒泡排序

冒泡排序是最简单的排序算法之一,它通过不断交换相邻的元素,将较大(或较小)的元素逐渐“冒泡”到数组的一端。具体实现时,我们可以使用两层循环来比较和交换元素,直到整个数组有序。

二、插入排序

插入排序的思想是将数组分为两个部分:已排序部分和未排序部分。每次从未排序部分中取出一个元素,插入到已排序部分的适当位置,以保持已排序部分的有序性。插入排序的实现可以使用一层循环和适当的元素交换。

三、选择排序

选择排序每次从未排序部分中选择最小(或最大)的元素,与未排序部分的第一个元素进行交换。通过不断选择最小(或最大)的元素,将其放置到已排序部分的末尾,从而逐渐形成有序序列。

四、快速排序

快速排序是一种分治的排序算法,它通过选择一个基准元素,将数组划分为两个子数组,其中一个子数组的所有元素都小于等于基准元素,另一个子数组的所有元素都大于基准元素。然后对两个子数组分别递归地进行快速排序,最终

将整个数组排序。

五、归并排序

归并排序也是一种分治的排序算法,它将数组划分为多个子数组,对每个子数组进行排序,然后再将排好序的子数组合并成一个有序的数组。归并排序的实现可以使用递归或迭代的方式。

六、性能比较与分析

在本次实验中,我们对以上几种排序算法进行了实现,并通过对不同规模的随机数组进行排序,比较了它们的性能。我们使用了计算排序时间的方式,并记录了每种算法在不同规模下的运行时间。通过对比实验结果,我们可以得出以下结论:

数据结构实验报告(C语言)顺序表__排序

数据结构实验报告(C语言)顺序表__排序
二、实验方法:(代码)
#include "stdafx.h" #include "stdio.h" #include "malloc.h" #define MAXSIZE 20 typedef struct{
int rБайду номын сангаасMAXSIZE+1]; int length;
}SqeList;
int InitList(); int CreateList(SqeList *L,int n); int PrintList(SqeList *L);
} } }
void ShellSort(SqeList *L,int n){ int i,di; //di 代表增量序列,并通过 for 循环依次计算出 di=n/2 的值 for(di=n/2;di>0;di/=2){ for(i=0;i<di;i++) ShellInsert(L,di); }
}
printf("%3d",L->r[i]); return 1; }
//直接插入排序 void InsertSort(SqeList *L){
int i,j; for(i=2;i<=L->length;i++){
L->r[0]=L->r[i]; j=i-1; while(L->r[0] < L->r[j]){

数据结构课程设计报告

数据结构课程设计报告
#include <time.h>
#include <cstdlib>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
#include <string>
usingnamespacestd;
#define ORGSIZE 10000
五、
快速排序对顺序或者逆序数组进行排序(规模大致在30k的时候)的时候由于子函数开辟得太多,导致函数堆栈长度超过c编译器中设置的长度,从而使得内存溢出。在此缩小快速排序的数组长度来解决该问题。

附件一:程序源代码
//该程序在64位win7下测试通过,编译器为gcc4.8.1
#include <iostream>
msort(a,sorted,0,len - 1);
}
测试结果如下图所示:
总结
根据排序是否使用分治思想将其分为两类,其中使用了并归方法的算法包括并归、快速和堆排序。剩下的选择、哈希、起泡和选择排序没有使用分治的办法(其实希尔排序在一定程度上也使用了并归的思想,但在此将其作为一种“改良版的冒泡排序”而归入该分组)。下文中将分别分析各组中的算法。
inttemp,j;

排序系统设计数据结构课程设计

排序系统设计数据结构课程设计

排序系统设计数据结构课程设计

一、项目背景和目的

排序系统是计算机科学中常见的一种算法,用于将一组数据按照特定的顺序进行罗列。在数据结构课程设计中,我们需要设计一个排序系统,以实现对输入数据的排序功能。本文将详细介绍排序系统的设计思路、数据结构的选择和实现方法。

二、设计思路

1. 功能需求

根据任务名称所描述的需求,我们的排序系统需要具备以下功能:

- 支持多种排序算法,如冒泡排序、插入排序、选择排序、快速排序等。

- 能够处理不同类型的数据,如整数、浮点数、字符串等。

- 具备可扩展性,方便后续添加更多的排序算法。

2. 数据结构选择

为了实现排序系统的功能,我们需要选择适合的数据结构来存储和操作数据。常见的数据结构有数组、链表、栈、队列等。在排序系统中,我们可以使用数组来存储待排序的数据。

3. 算法选择

根据任务名称所描述的排序系统,我们需要选择多种排序算法来实现。以下是几种常见的排序算法:

- 冒泡排序:通过相邻元素的比较和交换,将较大的元素逐渐“冒泡”到数组末尾。

- 插入排序:将待排序的元素按照顺序插入到已排序的数组中。

- 选择排序:每次从待排序的数组中选择最小的元素,放到已排序的数组末尾。

- 快速排序:通过一趟排序将待排序的数组分割成独立的两部份,其中一部份

的元素都比另一部份的元素小。

4. 系统设计

基于以上的设计思路,我们可以将排序系统设计为以下几个模块:

- 输入模块:用于接收用户输入的待排序数据。

- 排序算法模块:包含多种排序算法的实现。

- 输出模块:将排序结果输出给用户。

三、数据结构的实现

《数据结构》实验报告——排序

《数据结构》实验报告——排序

《数据结构》实验报告排序实验题目:

输入十个数,从插入排序,快速排序,选择排序三类算法中各选一种编程实现。

实验所使用的数据结构内容及编程思路:

1.插入排序:直接插入排序的基本操作是,将一个记录到已排好序的有序表中,从而得到一个新的,记录增一得有序表。

一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r[1..i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列r[1..i];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r[0]处设置哨兵。在自i-1起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。

2.快速排序:基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

假设待排序的序列为{L.r[s],L.r[s+1],…L.r[t]},首先任意选取一个记录(通常可选第一个记录L.r[s])作为枢轴(或支点)(pivot),然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较大的记录都安置在它的位置之后。由此可以该“枢轴”记录最后所罗的位置i作为界线,将序列{L.r[s],…,L.r[t]}分割成两个子序列{L.r[i+1],L.[i+2],…,L.r[t]}。这个过程称为一趟快速排序,或一次划分。

数据结构课程设计——排序与查找

数据结构课程设计——排序与查找

数据结构课程设计——排序与查找

一、排序算法介绍

排序算法是数据结构课程设计中的重要内容之一。排序是将一组数据按照特定的规则进行重新排列的过程,常用于数据的整理和查找。在排序算法中,我们主要讨论常见的几种排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。

1. 冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的元素,并按照升序或降序交换它们。通过多次遍历,最大(或最小)的元素会逐渐移动到列表的末尾,直到整个列表排序完成。

2. 选择排序

选择排序是一种简单直观的排序算法,它通过不断选择剩余元素中的最小(或最大)元素,并将其放置在已排序部分的末尾。选择排序的主要思想是每次从剩余元素中选择最小(或最大)的元素,并将其与当前位置交换。

3. 插入排序

插入排序是一种简单且直观的排序算法,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序的核心思想是将待排序元素插入到已排序序列中的适当位置,从而得到一个新的有序序列。

4. 快速排序

快速排序是一种高效的排序算法,它采用分治的思想,通过一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素小(或大),然后再对这两部分分别进行排序,最终得到整个序列有序。

5. 归并排序

归并排序是一种稳定的排序算法,它采用分治的思想,将待排序序列递归地分成两个子序列,分别进行排序,然后将两个有序子序列合并成一个有序序列。归并排序的核心思想是将两个有序子序列合并为一个有序序列。

数据结构排序实验报告

数据结构排序实验报告

引言概述:

数据结构排序实验是计算机科学与技术专业中一项重要的实践课程。通过实验,可以深入理解和掌握不同排序算法的原理、特点和性能表现。本文将针对数据结构排序实验进行详细的阐述和总结,包括实验目的、实验内容、实验结果分析和总结。

一、实验目的

1. 加深对数据结构排序算法的理解:通过实验,掌握不同排序算法的工作原理和实现方式。

2. 分析和比较不同排序算法的性能:对比不同排序算法在不同数据规模下的时间复杂度和空间复杂度,理解它们的优劣势。

3. 提高编程和算法设计能力:通过实验的编写,提升对排序算法的实现能力和代码质量。

二、实验内容

1. 选择排序算法:选择排序是一种简单直观的排序算法,将序列分为有序和无序两部分,每次从无序部分选择最小(最大)元素,放到有序部分的末尾(开头)。

- 算法原理及步骤

- 实现过程中的注意事项

- 时间复杂度和空间复杂度的分析

2. 插入排序算法:插入排序逐步构建有序序列,对于未排序的元素,在已排序序列中从后向前扫描,找到对应位置插入。

- 算法原理及步骤

- 实现过程中的注意事项

- 时间复杂度和空间复杂度的分析

3. 快速排序算法:快速排序利用分治的思想,将序列分为左右两部分,选取基准元素,将小于基准的放在左边,大于基准的放在右边,递归地对左右部分进行排序。

- 算法原理及步骤

- 实现过程中的注意事项

- 时间复杂度和空间复杂度的分析

4. 归并排序算法:归并排序是一种稳定的排序算法,通过将序列分为若干子序列,分别进行排序,然后再将排好序的子序列合并成整体有序序列。

- 算法原理及步骤

数据结构 实验报告 排序

数据结构 实验报告 排序

实验报告

实验目的:

1.掌握各种排序方法的排序过程;

2.了解一些排序算法的实现。

实验内容:

学生的考试成绩表由学生的学号、姓名和成绩组成,设计一个程序对给定的n个学生信息实现:

1.按分数高低排序,打印出每个学生在考试中的排名,分数相同的为同一名次,同一名次的学生按学号从小到大排列。

2.按照名次列出每个学生的名次、学号、姓名、成绩。

实验原理:

排序分为插入排序、交换排序、选择排序、归并排序等。插入排序又分为直接插入排序、其他插入排序和希尔排序;交换排序分为冒泡排序和快速排序;选择排序又分为简单选择排序和堆排序。不同的排序方法各有利弊,根据具体的情况选择合适的排序方法。

设计思想:

本程序采用简单选择排序的方法。程序中定义一个stu结构和student类。类中定义creat 创建函数,selectgrade成绩排序函数,samegrade、selectnum成绩相同的按学号排序函数,print输出函数。按照选择排序的思想,先对成绩按照从高到低进行排序;然后寻找成绩相同的部分,对该局部元素的学号从小到大进行排序。然后调用输出函数,输出名次、学号、姓名、成绩。

实现部分:

源代码:

#include<iostream.h>

struct stu

{

int num;

char name[100];

int grade;

};

class student

{ struct stu s[100];

int length;

int start,end;

public:

student(){length=0;}

void creat();

数据结构实验报告—排序

数据结构实验报告—排序

《算法与数据结构》课程实验报告

一、实验目的

1.实现多种类型的排序算法(插入排序、交换排序、选择排序、归并排序等)

2.理解排序过程

3.计算比较次数和移动次数,对比分析算法性能的优劣与适用场景

二、实验内容及要求

1、随机产生100个整数

2、使用不同的内排序方法对其排序,不得使用STL(标准模板库)现成代码

3、领会排序的过程

4、编程语言:C++

三、系统分析

(1)数据方面:通过随机数产生随机整形数据,在此基础上实现相关排序功能的调试。

(2)功能方面:

1.产生随机数

2.冒泡排序

3.直接插入排序

4.折半插入排序

5.希尔排序

6.快速排序

7.直接选择排序

8.归并排序

四、系统设计

(1)设计的主要思路

利用产生随机数的方法得到待排序数据元素的有限集合。在根据不同的排序算法使得这个集合变为递增序列。其中排序算法包括冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、直接选择排序、归并排序七中排序方式。(2)基本操作的设计

冒泡排序的基本方法:设待排序元素序列中元素个数为n,首先比较第n-2个元素和第n-1个元素,如果发生逆序(即前一个大于后一个),则将这两个元素交换;然后对第n-3个和第n-2个元素做同样处理,重复此过程直到处理完第0个和第1个元素。

直接插入排序的基本方法:当插入第i个元素时,前面的元素已经排好序,这时用V[i]的数据元素与前面的值进行比较,找到插入的位置,原来位置上的元

素向后顺移。

折半插入排序的基本方法:设在数据表中的元素序列个数为n。基本方法与直接插入排序一致,但在找寻插入位置的算法采用折半查询。

排序实验报告

排序实验报告

排序实验报告

排序实验报告

引言

排序是计算机科学中的一个重要概念,它指的是将一组元素按照特定的规则进行重新排列的过程。排序算法的选择和性能对于提高计算机程序的效率至关重要。为了深入了解不同排序算法的优劣,我们进行了一系列的排序实验。

实验设计

本次实验选择了五种常见的排序算法进行比较,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。在实验中,我们使用了Python编程语言来实现这些排序算法,并通过随机生成的整数数组作为排序的输入。

实验过程

在实验过程中,我们首先使用了冒泡排序算法。冒泡排序算法的基本思想是从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。通过多次遍历数组,将最大的元素逐渐“冒泡”到数组的末尾。冒泡排序算法的时间复杂度为O(n^2)。

接下来,我们实现了插入排序算法。插入排序算法的核心思想是将数组分为已排序和未排序两部分,每次从未排序部分中取出一个元素,并将其插入到已排序部分的适当位置。插入排序算法的时间复杂度也是O(n^2)。

然后,我们使用了选择排序算法。选择排序算法的基本思想是每次从未排序的部分中选择最小的元素,然后将其与未排序部分的第一个元素交换位置。通过多次遍历数组,将最小的元素逐渐选择到数组的开头。选择排序算法的时间复杂度同样为O(n^2)。

接下来,我们实现了快速排序算法。快速排序算法是一种分治法的排序算法,

其基本思想是选择一个基准元素,将数组分为两个子数组,一个子数组中的元

素都小于基准元素,另一个子数组中的元素都大于基准元素。然后,对这两个

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

《数据结构》课程设计报告

专业

班级

姓名

学号

指导教师

起止时间

课程设计:排序综合

一、任务描述

利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。

(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

要求:根据以上任务说明,设计程序完成功能。

二、问题分析

1、功能分析

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

(1)随机生成N个整数,存放到线性表中;

(2)起泡排序并计算所需时间;

(3)简单选择排序并计算时间;

(4)希尔排序并计算时间;

(5)直接插入排序并计算所需时间;

(6)时间效率比较。

2、数据对象分析

存储数据的线性表应为顺序存储。

三、数据结构设计

使用顺序表实现,有关定义如下:

typedef int Status;

typedef int KeyType ; //设排序码为整型量

typedef int InfoType;

typedef struct { //定义被排序记录结构类型

KeyType key ; //排序码

I nfoType otherinfo; //其它数据项

} RedType ;

typedef struct {

RedType * r; //存储带排序记录的顺序表

//r[0]作哨兵或缓冲区

int length ; //顺序表的长度

} SqList ; //定义顺序表类型

四、功能设计

(一)主控菜单设计

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

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

1.起泡排序

2.简单选择排序

3.希尔排序

4. 直接插入排序

0. 退出系统

(二)程序模块结构

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

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

●创建排序表函数InitList_Sq()

●起泡排序函数Bubble_sort()

●简单选择排序函数SelectSort()

●希尔排序函数ShellSort();

●对顺序表L进行直接插入排序函数Insertsort()

(三)函数调用关系

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

其中main()是主函数,它负责调用各函数。进行调用菜单函数menu(),根据选择项0~4调用相应的函数。

main()函数使

for循环实现重复选择。其循环结构如下:

for (;;)

{

long start,end;

switch(menu())

{

case 1:

printf("* 起泡排序*\n");

start=clock();

Bubble_sort(L);

end=clock();

printf("%d ms\n",end-start);

fp=fopen("D: 起泡排序 .txt","w");

if(fp==NULL)//打开文件失败

{

printf("打开文件失败!\n");

exit(1);

}

for(i=1;i<=L.length;i++)

fprintf(fp,"%d ",L.r[i]);

fclose(fp);

break;

case 2:

printf("* 简单选择排序*\n");

start=clock();

SelectSort(L);

end=clock();

printf("%d ms\n",end-start);

fp=fopen("D:直接插入排序.txt","w");

if(fp==NULL)//打开文件失败

{

printf("简单选择排序!\n");

exit(1);

}

for(i=1;i<=L.length;i++)

fprintf(fp,"%d ",L.r[i]);

fclose(fp);

break;

case 3:

printf("* 希尔排序*\n");

start=clock();

ShellSort(L,an,14);

end=clock();

printf("%d ms\n",end-start);

fp=fopen("D:希尔排序 .txt","w");

if(fp==NULL)//打开文件失败

{

printf("打开文件失败!\n");

exit(1);

}

for(i=1;i<=L.length;i++)

fprintf(fp,"%d ",L.r[i]);

fclose(fp);

break;

case 4:

printf("* 直接插入排序*\n");

start=clock();

Insertsort(L);

end=clock();

printf("%d ms\n",end-start);

fp=fopen("D:直接插入排序.txt","w");

if(fp==NULL)//打开文件失败

{

printf("打开文件失败!\n");

exit(1);

}

for(i=1;i<=L.length;i++)

fprintf(fp,"%d ",L.r[i]);

fclose(fp);

break;

case 0:

printf("\t 退出!\n");

return ;

}

}

(四)文件结构

1、sort.h:单链表相关的定义与声明

2、sort.cpp:单链表运算的实现

3、menu.h:主菜单函数的声明

4、menu.cpp:主菜单函数的实现

5、mn.cpp:主函数

(五)各函数的算法设计

1、InitList_Sq()

相关文档
最新文档