排序算法之希尔排序
时间:2022-07-28
本文章向大家介绍排序算法之希尔排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
希尔排序
希尔排序是优化后的插入排序,又名玄学排序,因为希尔排序是不稳定的。希尔排序就是将一个数组分成间隔为h的子数组,并对这些子数组进行插入排序,通过不断地缩小h的值,从而满足插入排序适合的情形:数组基本有序,从而达到良好的性能。
难点
希尔排序的难点在于递增序列的选择,我使用的是《算法(第四版)》中推荐的递增序列,即1/2(3k-1),从N/3开始递减至1。
演示
代码实现
希尔排序的代码与插入排序相似,只是增加了一个增量h
int N = t.length;
int h = 1;
while (h < N / 3) {
h = 3 * h + 1;
}
while (h >=1) {
for (int i = h; i < t.length; i++) {
int key = t[i];
int j = i - h;
while (j >= 0 && t[j] > key) {
t[j + h] = t[j];
j -= h;
}
t[j + h] = key;
}
h /= 3;
}
总结
通过对希尔排序运行时间的测试,发现希尔排序比插入排序和选择排序要快很多,尤其是数组越大的时候。希尔排序最坏运行时间为O(n2),最好运行时间为O(n),平均运行时间为O(n1.3)。有经验的程序员有时会用到希尔排序,因为对于中等大小的数组,它的运行时间是可以被接受的,并且不占用额外的空间。
- 声音分类的迁移学习
- 【死磕Java并发】—– J.U.C之AQS:CLH同步队列
- 使用Python完成你的第一个学习项目
- CA,给了数据库,给了机器,为啥也扩不了容?
- 如何使用Anaconda设置机器学习和深度学习的Python环境
- MQ,互联网架构解耦神器
- 预测随机机器学习算法实验的重复次数
- 服务化了,没想到耦合更加严重?
- 如何在Python中扩展LSTM网络的数据
- 使用Keras的Python深度学习模型的学习率方案
- 全球电脑手机无一幸免,英特尔CPU“漏洞事件”到底多严重?
- 评估Keras深度学习模型的性能
- Python机器学习的练习二:多元线性回归
- 熔断器 Hystrix 源码解析 —— 命令合并执行
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法