数据结构实验四报告排序 下载本文

数据结构实验报告

实验名称: 实验四——排序 学生姓名: 班级: 班内序号: 学号:

日 期: 2013年12月16日

1. 实验要求

使用简单数组实现下面各种排序算法,并进行比较。 排序算法:

1、插入排序 2、希尔排序 3、冒泡排序 4、快速排序 5、简单选择排序 6、堆排序(选作) 7、归并排序(选作) 8、基数排序(选作) 9、其他

要求:

1、测试数据分成三类:正序、逆序、随机数据

2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。

3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)

4、对2和3的结果进行分析,验证上述各种算法的时间复杂度

编写测试main()函数测试线性表的正确性。

2. 程序分析

2.1 存储结构

使用最简单的一维数组存储待排序的数据。共使用三个数组,一个用来构造正序数组,一个

是逆序数组,还有一个是随机数组。每种排序使用的数组都是具有相同初始值的,因而使得试验结果具有可比较性。

2.2关键算法分析

2.2.1 插入排序算法

插入排序的思想是:每次从无序区取一元素将其添加到有序区中。

2.2.2 希尔排序算法

希尔排序是一种缩小增量排序的算法,首先将待排序元素集按照一定间隔分成多个子集,分别对这些子集进行直接插入排序,整个序列部分有序。然后缩小间隔,在进行直接插入排序,直到间隔为1,此时,整个序列已全部有序。

2.2.3 起泡排序

起泡排序的思想是:两两比较相邻的元素,如果反序,则交换次序,直到没有反序的元素为止。

在此思想指导下①首先将待排序元素划分为有序区和无序区,初始状态有序区为空,无序区所有待排序素;

②对无序区从前向后依次将相邻元素关键码进行比较,若反序,则交换 ③重复执行

②直到无序区中没有元素。

2.2.4快速排序算法

2,2,4,1一趟快速排序算法自然语言描述如下 ① 选取区间第一个元素作为轴值

② 读取区间首尾坐标,并将其左右侧待比较元素

③ 右侧扫描:从后向前找到第一个比轴值小的元素,和左侧待比较元素交换(左侧第一个带比较元素为轴值)

④ 左侧扫描:从前向后找到第一个比轴值大的元素,和右侧待比较元素交换 ⑤ 重复②③,直到左右两侧带比较元素的坐标相等 其c++描述如下

2.2.4.2完整的快速排序算法如下:

2.2.5选择排序算法

选择排序自然语言描述如下:

① 在r[1]~r[n]待排序元素序列中选出最小记录,将其与第一个元素r[n]交换 ② 在r[2]~r[n]待排序元素序列中选出最小记录,将其与第一个元素r[i]交换 …………

③ 直至r[n-1]~r[n] C++描述如下: