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

考研算法29天:希尔排序 【希尔排序】

算法介绍

希尔排序 = 等差数列 + 普通版插入排序

循环数组

第一次每n/2为间隔分为4组,然后组内排序。

第二次每n/4为间隔分为2组。然后组内排序

第三次n/8为间隔分为一组。然后组内排序。

组内排序用插入排序来排序。

注:也可以第一次为n/3为间隔,第二次为n/3^2,,第三次为n/3^3.这个随你定义。

 上面这个图片是讲采用3的分法的话最坏算法时间复杂度只有O(n*开平方n)。

c++中的sort = 快排 + 插排  

 算法题目

算法ac代码:

#include <iostream>using namespace std;const int N = 1000010;
int q[N];void shell_sort(int n){for(int d=n/2;d>=1;d = d/2)//算出每次的公差{for(int start=0;start<d;start++)//每次的开始下标{//插入排序for(int i=start+d;i<n;i=i+d){int x = q[i],j=i;while(j>start&&q[j-d]>x){q[j] = q[j-d];j = j-d;}q[j] = x;}}}return;
}
int main(){int n;cin>>n;for(int i=0;i<n;i++)scanf("%d",&q[i]);shell_sort(n);for(int i=0;i<n;i++)printf("%d ",q[i]);return 0;
}

算法复杂度

时间复杂度:

要看你是按照啥规矩分的组,不同分组的时间复杂度不一样,如果是按照“2”的话时间复杂度为O(N^2)

空间复杂度

O(1)

稳定性:

原先的元素的相对位置会不一样,所以不稳定。

快排和希尔排序时间复杂度最坏情况是不考虑的,其发生这样的情况的概率就如小型星球撞地球的概率一样,可以忽略不计。

http://www.lryc.cn/news/94104.html

相关文章:

  • RN 学习小记之使用 Expo 创建项目
  • python爬虫从入门到精通
  • 从0到1精通自动化,接口自动化测试——数据驱动DDT实战
  • 【微服务】springboot整合swagger多种模式使用详解
  • AI 绘画(1):生成一个图片的标准流程
  • CPU、内存、缓存的关系
  • AI黑客松近期比赛清单;36氪AI淘宝店盈利复盘;GitHub Copilot官方最佳实践;AI在HR领域的应用探索 | ShowMeAI日报
  • 想要让视频素材格式快速调整转换的方法分享
  • 面向对象分析与设计 UML2.0 学习笔记
  • [数据库系统] 五、数据增删改
  • docker私有注册表创建和使用
  • 用OpenCV进行OCR字符分割
  • MyCat Docker 搭建与测试
  • 车载通讯USB开发,增强车内娱乐体验
  • js的一些小技巧
  • Springboot Mybatis 自定义顺序排序查询,指定某个字段
  • 期刊会议审稿意见
  • Java类加载机制:从字节码到对象的奇妙之旅
  • 代码随想录第一天|二分法、双指针
  • Flink中KeyedStateStore实现--怎么做到一个Key对应一个State
  • flex: 0 0 100%;
  • IMX6ULL系统移植篇-镜像烧写方法
  • 【Android】实现雷达扫描效果,使用自定义View来绘制雷达扫描动画
  • 小程序 - 文件预览
  • 将String类型的证书转换为X509Certificate类型对象,读取证书链文件内容,完成证书链校验
  • v-model实现原理(一根绳上的蚂蚱)
  • 第三章 仅支持追加的单表内存数据库
  • 抖音seo矩阵系统源码解析
  • 6个ChatGPT4的最佳用途
  • go系列-读取文件