优化数据结构:anyview解题——直接插入排序与改进起泡排序
需积分: 3 182 浏览量
更新于2024-09-21
收藏 36KB DOC 举报
在第十章的数据结构课程中,我们讨论了两个重要的排序算法的修改版本,分别是直接插入排序和冒泡排序,针对特定的数据结构——顺序表(SqList)进行优化。
首先,是关于直接插入排序的改进。原算法在10.2.1节中使用了监视哨(L.r[1..k]),这里将其调整为L.r[k+1]作为哨兵。新的`InsertSort`函数如下:
```cpp
void InsertSort(SqList& L) {
int i, j, k;
for (i = 2; i <= L.length; i++) {
L.r[0] = L.r[i]; // 将当前元素暂存到哨兵位置
int j;
for (j = i - 1; j > 0 && GT(L.r[i], L.r[j]); j--) {} // 通过哨兵辅助查找插入位置
for (k = i - 1; k >= j + 1; k--) {
L.r[k+1] = L.r[k]; // 逐步后移元素
}
L.r[j+1] = L.r[0]; // 将哨兵位置的元素插入正确位置
}
}
```
这个改动简化了插入过程,通过哨兵单元快速找到插入位置,提高了排序效率。
其次,是冒泡排序的优化。原始算法使用布尔变量`change`表示是否发生过交换,这里将其改为整型变量`change`,记录最后一次交换的位置。`BubbleSort`函数如下:
```cpp
void BubbleSort(SqList& L) {
int i, j, change = 1;
for (i = L.length; i > 1; i = change) { // 当一轮没有发生交换时,设置下一轮的起始位置
for (change = 1, j = 1; j < i; j++) {
if (GT(L.r[j], L.r[j+1])) {
Swap(L.r[j], L.r[j+1]); // 交换元素
change = j + 1; // 更新交换位置
}
}
}
}
```
这种改变使得算法更加直观,便于理解和执行,同时保持了排序的逻辑。
这两个算法的共同点是都利用了顺序表(SqList)的特点,通过哨兵和辅助变量来提高排序的效率。它们在课程设计题中作为练习,旨在让学生理解并熟练掌握不同数据结构下的排序算法优化策略。学习这些内容有助于提高编程实践能力和对排序算法的理解深度。
2015-06-16 上传
2015-05-19 上传
2023-10-19 上传
2023-09-08 上传
2023-09-01 上传
2023-10-19 上传
2023-06-28 上传
2023-11-06 上传
msxiaochao
- 粉丝: 0
- 资源: 29
最新资源
- 多约束下多车场车辆路径问题的蚁群算法研究
- 新东方英语词根词缀记忆大全
- AspectJ in Action 2003电子书
- 使用C#获取CPU及硬盘序列号
- 嵌入式Linux应用程序开发详解-第1章
- 移动数据通信的书Wireless and Mobile Data Networks.
- UML项目指导3-用例
- Matlab7官方学习手册
- 哈尔滨工业大学贾世楼的信息论的研究生课程讲义
- AT89S51实验及实践教程
- Dreamweaver MX 入门
- 信息论的研究生课程讲义
- 3G.Evolution.HSPA.and.LTE.for.Mobile.Broadband
- 学C都要来看看(应用版)
- 程序设计经典问题.doc
- 中文版AutoCAD_2007实用教程