希尔排序
来源:互联网 发布:手机淘宝怎么改中评 编辑:程序博客网 时间:2024/05/22 07:07
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。
基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
该算法对广泛传播的元素使用插入排序,首先对它们进行排序,然后对较宽的间隔元素进行排序。该间隔称为间隔。该间隔是基于Knuth公式计算的,
Knuth的公式
h = h * 3 + 1where − h is interval with initial value 1
该算法对于中型数据集是非常有效的,因为其平均和最差情况复杂度为Ο(n),其中n是项目数。
package sortfunc ShellSort(list []int) ([]int, int) { count := 0 for gap := len(list) / 2; gap > 0; gap /= 2 { for i := gap; i < len(list); i++ { for j := i; j-gap >= 0 && list[j] < list[j-gap]; j -= gap { count++ swap(list, j, j-gap) } } } return list, count}func swap(arr []int, a int, b int) { arr[a] = arr[a] + arr[b] arr[b] = arr[a] - arr[b] arr[a] = arr[a] - arr[b]}
阅读全文
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- c++中static 和const的作用
- 15物联网签到帖
- java和c语言变长参数的底层实现区别
- OOP之面向对象
- Unity轻轻轻轻轻量级多人在线聊天系统
- 希尔排序
- 每日一诗词 —— 无题
- Codeforces Round #432 (Div. 2)C,D,E题目详解
- spring,springmvc,mybatits集成实例--多表关联查询
- 流式大数据实时处理技术、平台及应用
- java对mysql数据库进行备份和还原
- 数据库——事务隔离级别的理解
- 0.ROS 安装与配置
- bzoj 1588: [HNOI2002]营业额统计 spaly