#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&&LT(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. 数据结构与算法之希尔排序

    数据结构与算法之希尔排序 目录 希尔排序介绍 希尔排序法的示意图 代码实现 1. 希尔排序介绍 简单插入排序存在的问题:当然需要插入的数是较小的数时,后移的次数明显增加,对效率有影响. 希尔排序法介绍 ...

  2. 数据结构之插入排序:希尔排序(缩小增量排序)

    排序算法:希尔排序.缩小增量排序 思维导图: 希尔排序的定义: 例: 希尔排序d的选取: 希尔排序的代码实现: 希尔排序的性能: 思维导图: 希尔排序的定义: 普通的插入算法正序时时间复杂度会很小,但 ...

  3. 浅入浅出数据结构(18)——希尔排序

    在上一篇博文中我们提到:要令排序算法的时间复杂度低于O(n2),必须令算法执行"远距离的元素交换",使得平均每次交换减少不止1逆序数. 而希尔排序就是"简单地" ...

  4. 数据结构:直接插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排序

    一.什么是排序 排序就是将一组杂乱无章的数据按照一定的次序组织起来,此次序可以是升序也可以是降序 二.为什么需要进行排序 为了满足一些需求,比如在比较学生的成绩时,我们就需要给所有学生的成绩排一个顺序 ...

  5. 数据结构例程——插入排序之希尔排序

    本文是[数据结构基础系列(9):排序]中第3课时[插入排序之希尔排序]的例程. 1.希尔排序 #include <stdio.h> #define MaxSize 20 typedef i ...

  6. Java数据结构与算法(六) 希尔排序

    ###一.希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提 ...

  7. 在路上---学习篇(一)Python 数据结构和算法 (4) --希尔排序、归并排序

    独白: 希尔排序是经过优化的插入排序算法,之前所学的排序在空间上都是使用列表本身.而归并排序是利用增加新的空间,来换取时间复杂度的减少.这俩者理念完全不一样,注定造成的所消耗的时间不同以及空间上的不同 ...

  8. 数据结构与算法之四希尔排序法

    希尔排序法的思想是:先取一个小于数组长度n的数d1作为第一个增量,把数组里面的n个数分成d1个组,数组中所有距离为d1的数都放在同一个小组中,分组过程见下图,再在各组里进行直接插入排序,然后取第二个增 ...

  9. 数据结构第一课:希尔排序和选择排序的时间复杂度随机数组的生成

    随机生成数组 #include <iostream> #include <algorithm> #include<ctime> #include<time.h ...

最新文章

  1. 还要让你的家人等多久?五年后,你在做什么?
  2. python length-1_TypeError:使用基本操作时,只有length1数组可以转换为Python标量
  3. linux基本命令-ls
  4. Android安全问题 抢先开机启动
  5. 计算与推断思维 三、Python 编程
  6. tomcat启动报错 关键字:java.lang.NoClassDefFoundError和 java.lang.ClassNotFoundExceeption
  7. 基于SSM的教师本科教学质量评价管理系统
  8. 数据分析报告怎么写(三)
  9. 三菱FX5U系列PLC控制10轴设备成套资料打包三菱FX5U控制10轴伺服的设备成套电气图纸
  10. 如何有效地解决数据变成快捷方式
  11. Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!...
  12. matlab simulink的constant模块
  13. 负数的二进制表示及左移功能的验证
  14. python学习-绪
  15. Revit初试水之点击按钮打开网页
  16. android studio按钮点击事件,如何在Android Studio中添加按钮单击事件
  17. 手机号 imsi tmsi_你好,我借的网贷忘了叫什么名字了怎么办,手机号也没用了,怎么可以查到-免费法律咨询...
  18. SQL笔试题(持续更新)
  19. option 82是dhcp报文中的中继代理
  20. 怎样查询多个天天快递单号的物流并分析是否签收

热门文章

  1. 分享自己作为一个程序员的找工作经历
  2. 最大和 -- 最大子矩阵
  3. 关于android 调用网页隐藏地址栏
  4. windows phone (12) 小试自定义样式
  5. Java poi读取,写入Excel2003
  6. android内存及内存溢出分析
  7. marquee 移动属性
  8. 通用滤波器设计----东南大学的
  9. elasticsearch 6.x (三) linux 集群多节点部署
  10. Android 人脸实名验证demo——腾讯人脸核身·云智慧眼