数据结构之插入排序之希尔排序(缩小增量排序)—参考整理严蔚敏数据结构
2014-11-08 21:01
295 查看
#include<iostream> using namespace std; #define MAXSIZE 20 // 一个用作示例的小顺序表的最大长度 #define EQ(a,b) ((a)==(b)) #define LT(a,b) ((a)<(b)) #define LQ(a,b) ((a)<=(b)) typedef int InfoType; // 定义其它数据项的类型 typedef int KeyType; // 定义关键字类型为整型 struct RedType // 记录类型 { KeyType key; // 关键字项 InfoType otherinfo; // 其它数据项,具体类型在主程中定义 }; struct SqList // 顺序表类型 { RedType r[MAXSIZE + 1]; // r[0]闲置或用作哨兵单元 int length; // 顺序表长度 }; void ShellInsert(SqList &L, int dk) { // 对顺序表L作一趟希尔插入排序。本算法是和一趟直接插入排序相比, // 作了以下修改: // 1.前后记录位置的增量是dk,而不是1; // 2.r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到 int i, j; for (i = dk + 1; i <= L.length; ++i) if LT(L.r[i].key, L.r[i - dk].key) { // 需将L.r[i]插入有序增量子表 L.r[0] = L.r[i]; // 暂存在L.r[0] for (j = i - dk; j>0 && LT(L.r[0].key, L.r[j].key); j -= dk) L.r[j + dk] = L.r[j]; // 记录后移,查找插入位置 L.r[j + dk] = L.r[0]; // 插入 } } void print(SqList L) { int i; for (i = 1; i <= L.length; i++) printf("%d ", L.r[i].key); printf("\n"); } void print1(SqList L) { int i; for (i = 1; i <= L.length; i++) printf("(%d,%d)", L.r[i].key, L.r[i].otherinfo); printf("\n"); } void ShellSort(SqList &L, int dlta[], int t) { // 按增量序列dlta[0..t-1]对顺序表L作希尔排序。算法10.5 int k; for (k = 0; k<t; ++k) { ShellInsert(L, dlta[k]); // 一趟增量为dlta[k]的插入排序 printf("第%d趟排序结果: ", k + 1); print(L); } } #define N 10 #define T 3 void main() { RedType d = { { 49, 1 }, { 38, 2 }, { 65, 3 }, { 97, 4 }, { 76, 5 }, { 13, 6 }, { 27, 7 }, { 49, 8 }, { 55, 9 }, { 4, 10 } }; SqList l; int dt[T] = { 5, 3, 1 }; // 增量序列数组 for (int i = 0; i<N; i++) l.r[i + 1] = d[i]; l.length = N; printf("排序前: "); print(l); ShellSort(l, dt, T); printf("排序后: "); print1(l); }
相关文章推荐
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- 数据结构之三元组顺序表实现稀疏矩阵运算(参考整理严蔚敏数据结构)
- 数据结构之双向循环链表(参考整理严蔚敏数据结构)
- 数据结构之设置尾指针的单向循环链表(参考整理严蔚敏数据结构)
- 数据结构之实用单链表(参考整理严蔚敏数据结构)
- 排序-插入排序-希尔排序(缩小增量排序)-数据结构(28)
- 数据结构之有向网邻接表实现拓扑与关键活动(参考整理严蔚敏数据结构)
- 数据结构之插入排序(直插,折半插,2路插)—参考整理严蔚敏数据结构
- 数据结构6-排序算法(直接插入排序、希尔排序、快速排序、归并排序和堆排序)
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 数据结构之线索二叉树(整理严蔚敏数据结构)
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 数据结构值行逻辑链接表实现矩阵运算(参考整理严蔚敏数据结构)
- 数据结构之顺序串(整理严蔚敏数据结构)
- [数据结构]插入排序与希尔排序
- 数据结构之排序--插入类排序
- 【数据结构与算法】直接插入排序
- 【数据结构】单链表的建立,测长,打印,删除,插入, 排序, 逆置
- 数据结构之进阶排序(希尔排序、快速排序、归并排序)