实验12排序算法的程序实现
- 格式:doc
- 大小:24.00 KB
- 文档页数:1
实验12:排序算法的程序实现
一、实验目的
1.掌握简单插入排序、冒泡排序、快速排序、堆排序以及归并排序的算法并加以应用。
2.对各种查找、排序技术的时间、空间复杂性有进一步认识。
二、实验要求
1.认真阅读和掌握和本实验相关的教材内容。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容
(必做)1.编写程序实现下述五种算法,并用以下无序序列加以验证:
49,38,65,97,76,13,27,49
简单插入排序,冒泡排序,快速排序,归并排序,堆排序
(必做)2.试以L.r[k+1] 作为监视哨改写10.2.1中给出的直接插入排序算法。
其中,L.r[1..k] 为待排序记录且k<MAXSIZE 。
// 对L 中的元素按关键字递增次序进行直接插入排序("监视哨"设在表尾)
void insertsort(table *L)
(必做)3.试设计一个算法,使得在O(n)的时间内重排数组,将所有取负值的关键字放在所有取非负值的关键字之前。
(选做)4.归并排序的另一策略是,先对待排序序列扫描一遍,找出并划分为若干个最大有序子列,将这些子列作为初始归并段。
试写一个算法在顺序表结构上实现这一策略。
(选做)5.荷兰国旗问题:设有一个仅由红、白、兰这三种颜色的条块组成的条块序列。
请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、兰的顺序排好,即排成荷兰国旗图案。
问题描述3种颜色(0,1,2)在一个数组里,每次只可交换一次,扫描一遍后,三种颜色自然分开,应为颜色为:红,白,蓝,(荷兰国旗的颜色)所也叫荷兰国旗问题,例如:
0, 2, 1, 2, 0, 1, 0, 2, 2, 1, 0, 1, 2, 1, 1, 0, 0, 1, 1, 2
排列后
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2
四、思考与提高
1.设有1000个无序的元素,希望用最快的速度挑出其中前10个最大的元素,采用哪一种排序方法最好?为什么?
2.如何构造一种排序方法,使五个整数至多用七次比较就可以完成排序任务?。