数据结构--------------静态表的希尔排序
#define LT(a,b) ((a)< (b))
#define EQ(a,b) ((a)==(b))
#define LQ(a,b) ((a)<=(b))
typedef struct ElemType
{//表中元素结构
int key;
char name[20];
}ElemType;
typedef struct SSTable
{//静态表结构
ElemType *elem;
int length;
}SSTable;
ElemType r[20];//全局变量,用于传值给表元素
void Create_SqTable(SSTable &T,int n)
{//创建顺序表
T.elem=new ElemType [n];
for(int i=1;i<=n;i++)//静态表第一个元素不用
T.elem[i]=r[i-1];
T.length=n;
}
void InPut(SSTable &T)
{//顺序表的录入
char c='#';
static int n=0;
while(c!='!')
{
cout<<"元素关键字:";
cin>>r[n].key;
cout<<"元素名字:";
cin>>r[n].name;
n++;
c=getchar();
}
Create_SqTable(T,n);
}
//思想:
//先将整个序列分成若干个子序列,再对子序列进行直接插入排序
//待到子序列基本有序,则对全体记录进行一次直拉插入排序
void ShellInsert(SSTable &L,int dk)
{//dk是前后记录的增量
int j;
for(int i=dk+1;i<=L.length;++i)
if(LT(L.elem[i].key,L.elem[i-dk].key))
{
L.elem[0]=L.elem[i];
for(j=i-dk;j>0&<(L.elem[0].key,L.elem[j].key);j-=dk)
L.elem[j+dk]=L.elem[j];
L.elem[j+dk]=L.elem[0];
}
}
void ShellSort(SSTable &L,int dlta[],int t)
{//对t个记录进行希排序
for(int k=0;k<t;k++)
ShellInsert(L,dlta[k]);
}
void Print(SSTable L)
{
for(int i=1;i<=L.length;i++)
cout<<L.elem[i].key<<" "<<L.elem[i].name<<endl;
}
转载于:https://www.cnblogs.com/zhangjunjie/p/3368241.html
数据结构--------------静态表的希尔排序相关推荐
- 数据结构与算法之希尔排序
数据结构与算法之希尔排序 目录 希尔排序介绍 希尔排序法的示意图 代码实现 1. 希尔排序介绍 简单插入排序存在的问题:当然需要插入的数是较小的数时,后移的次数明显增加,对效率有影响. 希尔排序法介绍 ...
- 数据结构之插入排序:希尔排序(缩小增量排序)
排序算法:希尔排序.缩小增量排序 思维导图: 希尔排序的定义: 例: 希尔排序d的选取: 希尔排序的代码实现: 希尔排序的性能: 思维导图: 希尔排序的定义: 普通的插入算法正序时时间复杂度会很小,但 ...
- 浅入浅出数据结构(18)——希尔排序
在上一篇博文中我们提到:要令排序算法的时间复杂度低于O(n2),必须令算法执行"远距离的元素交换",使得平均每次交换减少不止1逆序数. 而希尔排序就是"简单地" ...
- 数据结构:直接插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排序
一.什么是排序 排序就是将一组杂乱无章的数据按照一定的次序组织起来,此次序可以是升序也可以是降序 二.为什么需要进行排序 为了满足一些需求,比如在比较学生的成绩时,我们就需要给所有学生的成绩排一个顺序 ...
- 数据结构例程——插入排序之希尔排序
本文是[数据结构基础系列(9):排序]中第3课时[插入排序之希尔排序]的例程. 1.希尔排序 #include <stdio.h> #define MaxSize 20 typedef i ...
- Java数据结构与算法(六) 希尔排序
###一.希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提 ...
- 在路上---学习篇(一)Python 数据结构和算法 (4) --希尔排序、归并排序
独白: 希尔排序是经过优化的插入排序算法,之前所学的排序在空间上都是使用列表本身.而归并排序是利用增加新的空间,来换取时间复杂度的减少.这俩者理念完全不一样,注定造成的所消耗的时间不同以及空间上的不同 ...
- 数据结构与算法之四希尔排序法
希尔排序法的思想是:先取一个小于数组长度n的数d1作为第一个增量,把数组里面的n个数分成d1个组,数组中所有距离为d1的数都放在同一个小组中,分组过程见下图,再在各组里进行直接插入排序,然后取第二个增 ...
- 数据结构第一课:希尔排序和选择排序的时间复杂度随机数组的生成
随机生成数组 #include <iostream> #include <algorithm> #include<ctime> #include<time.h ...
最新文章
- 还要让你的家人等多久?五年后,你在做什么?
- python length-1_TypeError:使用基本操作时,只有length1数组可以转换为Python标量
- linux基本命令-ls
- Android安全问题 抢先开机启动
- 计算与推断思维 三、Python 编程
- tomcat启动报错 关键字:java.lang.NoClassDefFoundError和 java.lang.ClassNotFoundExceeption
- 基于SSM的教师本科教学质量评价管理系统
- 数据分析报告怎么写(三)
- 三菱FX5U系列PLC控制10轴设备成套资料打包三菱FX5U控制10轴伺服的设备成套电气图纸
- 如何有效地解决数据变成快捷方式
- Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!...
- matlab simulink的constant模块
- 负数的二进制表示及左移功能的验证
- python学习-绪
- Revit初试水之点击按钮打开网页
- android studio按钮点击事件,如何在Android Studio中添加按钮单击事件
- 手机号 imsi tmsi_你好,我借的网贷忘了叫什么名字了怎么办,手机号也没用了,怎么可以查到-免费法律咨询...
- SQL笔试题(持续更新)
- option 82是dhcp报文中的中继代理
- 怎样查询多个天天快递单号的物流并分析是否签收