数据结构实践项目——排序

本文是[数据结构基础系列(9):排序]课程的实践项目。

本文针对:
1. 排序问题及导学
2. 插入排序之直接插入排序
3. 插入排序之希尔排序
4. 交换排序之冒泡排序
5. 交换排序之快速排序
6. 选择排序之直接选择排序
7. 选择排序之堆排序
8. 归并排序
9. 简单的计数排序
10. 基数排序
11. 各种排序的比较

纸上谈兵:“知原理”检验题目

1.给定序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7},采用下面的算法,分别描述排序的过程:
(1)直接插入排序; (2)希尔排序; (3)冒泡排序; (4)快速排序; (5)直接选择排序; (6)堆排序; (7)归并排序; (8)简单的计数排序; (9)基数排序
2、关于堆
(1)下列关键码序列中__是堆。
  A. (54,41,20,16,30,6,36,24,12)
  B. (54,41,20,36,12,6,16,24,30)
  C. (54,20,41,36,12,6,16,30,24)
  D. (54,30,20,24,12,16,6,41,36)
(2)已知关键字序列5,8,12,19,28,20,15,22是小根堆,插入关键字3,调整好后得到的小根堆是什么?
3、如果将所有中国人按照生日来排序,则使用(   )算法最快?
4、一个序列中有10000个元素,若只想得到其中前10个最小元素,则最好采用(   )排序方法?
5、在有n个关键字互不相同的记录中,找到关键字由小到大第k大的记录,用(   )排序的思想设计算法更好?

课后上机实践

【项目1 - 验证算法】
  用序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}作为测试数据,运行并本周视频中所讲过的算法对应 程序,观察运行结果并深刻领会算法的思路和实现方法:(1)直接插入排序;(2)希尔排序;(3)冒泡排序;(4)快速排序;(5)直接选择排序;(6)堆排序;(7)归并排序;(8)基数排序。
  参考解答:(1) (2) (3) (4) (5) (6) (7) (8)

【项目2 - 大数据集上排序算法性能的体验】
  设计一个函数,产生一个至少5万条记录的数据集合。在同一数据集上,用直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识。

提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法库,作为我们这门课算法库的收官之作;
提示2:本项目旨在获得对于复杂度不同算法的感性认识,由于数据分布特点、计算机运行状态等不同,其结果并不能完全代替对算法复杂度的理论分析;
提示3:由于C语言标准提供的时间函数只精确到秒,几种O(nlog2n)级别的算法,在5万条记录的压力下,并不能明显地看出优劣,可以忽略直接插入排序、冒泡排序、直接选择排序这三种相对低效率的算法(以节约时间。若能够忍受他们长时间地运行,请自便),成10倍地加大数据量,然后进行观察。

参考解答

【项目3 - 归并排序算法的改进】
  采用归并排序、快速排序等高效算法进行排序,当数据元素较少时(如n≤64),经常直接使用直接插入排序算法等高复杂度的算法。这样做,会带来一定的好处,例如归并排序减少分配、回收临时存储区域的频次,快速排序减少递归层次等。
试按上面的思路,重新实现归并排序算法。
参考解答

【项目4 - 英文单词的基数排序】
  设计一个基数排序的算法,将一组英文单词,按字典顺序排列。假设单词均由小写字母或空格构成,最长的单词有MaxLen个字母。
参考解答

时间: 2025-01-30 18:13:45

数据结构实践项目——排序的相关文章

数据结构实践项目——查找(一)

本文是[数据结构基础系列(8):查找]课程的第一组实践项目. 本文针对: 0801 查找问题导学 0802 线性表的顺序查找 0803 线性表的折半查找 0804 索引存储结构 0805 分块查找 0806 二叉排序树 0807 二叉排序树(续) 0808 平衡二叉树 纸上谈兵:"知原理"检验题目 [参考(部分)] [参考(1)] 1.对于A[0..10]有序表{12,18,24,35,47,50,62,83,90,115,134} (1)用二分查找法查找 90时,需进行多少次查找可确

数据结构实践项目——文件

本文是针对[数据结构基础系列(11):文件]中的实践项目. [项目1]操作文件 有若干学生的成绩数据如下,将这些数据保存到st数组中: 学号 姓名 年龄 性别 语文 数学 英语 1 陈华 20 男 78 90 84 5 张明 21 男 78 68 92 8 王英 20 女 86 81 86 3 刘丽 21 女 78 92 88 2 许可 20 男 80 83 78 4 陈军 20 男 78 88 82 7 马胜 21 男 56 67 75 6 曾强 20 男 78 89 82 基于这些数据,编程

数据结构实践项目——图的基本运算及遍历操作

本文是针对[数据结构基础系列(7):图]中第1-9课时的实践项目. 0701 图结构导学 0702 图的定义 0703 图的基本术语 0704 图的邻接矩阵存储结构及算法 0705 图的邻接表存储结构及算法 0706 图的遍历 0707 非连通图的遍历 0708 DFS的应用 0709 BFS的应用 [项目1 - 图基本算法库] 定义图的邻接矩阵和邻接表存储结构,实现其基本运算,并完成测试. 要求: 1.头文件graph.h中定义相关的数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括

数据结构实践项目——查找(二)

本文是[数据结构基础系列(8):查找]课程的第二组实践项目. 本文针对: 9. B-树 10. B+树 11. 哈希表--散列结构 12. 哈希表的运算 13. 拓展:谷歌搜索的数据结构 纸上谈兵:"知原理"检验题目 [参考解答] 1.给定序列{4, 9, 0, 1, 8, 6, 3, 5, 2, 7} (1)创建对应的3阶B-树b,请画出构造过程 (2)从b中分别删除关键字为8和1的节点,画出其过程 2.建立序列{16, 74, 60, 43, 54, 90, 46, 31, 29,

数据结构实践项目——最短路径和拓扑序列

本文是针对[数据结构基础系列(7):图]的第2组实践例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) 0710 生成树的概念 0711 最小生成树的普里姆算法 0712 最小生成树的克鲁斯卡尔算法 0713 从一个顶点到其余各顶点的最短路径 0714 每对顶点之间的最短路径 0715 拓扑排序 0716 AOE网与关键路径 纸上谈兵:"知原理"检验题目 1.针对下面的图1: (图1) (1)写出图的邻接矩阵: (2)按照Prim算

数据结构 实践项目——数据结构、算法、程序设计

[项目1 - C/C++语言中函数参数传递的三种方式] C语言提供了两种函数参数传递的方式:传值和传地址.在C++中,又拓展了引用方式.通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备. 下面是希望能够交换两个整型变量的swap函数的三个版本(从课程主页中可以找到项目链接,复制后就能调试,不必费事敲代码): //(1)传值 void myswap(int x, int y) { int t; t=x; x=y; y=t; } //(2)传地址 void myswap(int *

数据结构实践项目——链表

本组项目针对<数据结构基础系列(2):线性表>课程第8-15节 8. 线性表的链式存储 9. 建立单链表 10. 单链表基本操作的实现 11. 单链表应用举例 12. 双链表 13. 循环链表 14. 线性表的应用 15. 有序表 [项目1 - 建立单链表] 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果. 请在下面代码的基础上开展工作: #include <stdio.h> #include <malloc.h> typedef int Ele

数据结构实践项目——栈

本组项目针对<数据结构基础系列(3):栈和队列>中的1-6课: 1 "栈和队列"导学 2 栈的定义 3 栈的顺序存储结构及其基本运算实现 4 栈的链式存储结构及其基本运算的实现 5 栈的应用1-表达式求值 6 栈的应用2-迷宫问题 [项目1 - 建立顺序栈算法库] 定义顺序栈存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitStack(SqStack *&

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-6, 8-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BTNode *&b,ch