当前位置: 首页 > news >正文

排序算法大荟萃——希尔(Shell)排序算法

1、基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先再各族中进行直接插入排序,然后取第二个增量d2<d1重复上述的分组和排序过程,知道所取的增量dt=1(dt<dt-1<...<2<1),即所有记录放在同一组中进行直接插入排序为止。

如:待排序文件有10个记录,则增量序列的取值依次为5,3,2,1.(增量d=(d+1)/2)

2、代码如下:

void ShellSort1(int * data,int left,int right)
{
int len=right-left+1;
int d=len;
while(d>1)
{
d=(d+1)/2;
for(int i=left;i<right+1-d;i++)
{
if(data[i+d]<data[i])
{
int tmp=data[i+d];
data[i+d]=data[i];
data[i]=tmp;
}
}
}
}

void ShellSort2(int *data,int len)
{
int d=len;
while(d>1)
{
d=(d+1)/2;
for(int i=0;i<len-d;i++)
{
if(data[i+d]<data[i])
{
int tmp=data[i+d];
data[i+d]=data[i];
data[i]=tmp;
}
}
for(int i=0;i<10;i++)
printf("%5d",data[i]);
printf("\n");

}
}

希尔排序是一种不稳定排序,时间复杂度O(n log n),空间复杂度O(1)

 

转载于:https://www.cnblogs.com/mj-selina/p/5804422.html

相关文章:

  • Java内存泄露的理解与解决
  • 大冰--寻人启事--one
  • Java反射访问私有变量和私有方法
  • 电源开关IC
  • Java中sleep和wait的区别
  • iOS的一些面试题分析总结(1)
  • sql中的group by
  • java的finally语句
  • 各种编程语言变量的数据类型
  • java解惑你知多少(一)
  • 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体...
  • java解惑你知多少(二)
  • lnmp的使用
  • java解惑你知多少(三)
  • linux挂载windows共享文件夹
  • [case10]使用RSQL实现端到端的动态查询
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【5+】跨webview多页面 触发事件(二)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android单元测试 - 几个重要问题
  • C++类的相互关联
  • canvas 高仿 Apple Watch 表盘
  • Date型的使用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JAVA并发编程--1.基础概念
  • NSTimer学习笔记
  • Redis 懒删除(lazy free)简史
  • Ruby 2.x 源代码分析:扩展 概述
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SSH 免密登录
  • vue总结
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 讲清楚之javascript作用域
  • 深入浏览器事件循环的本质
  • 问题之ssh中Host key verification failed的解决
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #if和#ifdef区别
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (03)光刻——半导体电路的绘制
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (排序详解之 堆排序)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)Mysql的优化设置
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)Linux网络编程入门
  • .Net Core 中间件验签
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池