博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
希尔排序
阅读量:7009 次
发布时间:2019-06-28

本文共 1202 字,大约阅读时间需要 4 分钟。

hot3.png

希尔排序是以插入排序为基础的排序算法,搞懂了插入排序之后再来看希尔排序就十分简单了。

public static void sort(int[] array) {    if(array == null || array.length <= 1) return;    int length = array.length;    //i用来控制每次排序的前后数的间隔    for (int i = length / 2; i > 0; i /= 2) {        for (int j = i; j < length; j++) {            //下面是插入排序的步骤            int temp = array[j];            int k = j;            while (k >= i && temp < array[k - i]) {                array[k] = array[k - i];                k -= i;            }            array[k] = temp;        }    }}

最优时间复杂度:O(n)

平均时间复杂度:O(n^1.3)

最坏时间复杂度:O(n^2)

平均空间复杂度:O(1)

希尔排序可以通过对于排序前后间隔的值控制来做到最优化结构,最优化的结构为:

public static void sort(int[] array) {    int out, in, temp;    int length = array.length;    int h = 1;    if (h < length / 3) {        h = 3 * h + 1;    }    while (h > 0) {        for (out = h; out < length; out++) {            temp = array[out];            in = out;            while (in >= h && array[in - h] > temp) {                array[in] = array[in - h];                in -= h;            }            array[in] = temp;        }        h = (h - 1) / 3;    }}

算法的思想是一样的,但是对于结构的控制可能有所不同。

希尔排序因为前后间隔值的变化可能会导致相同的元素出现位置错乱,所以也是不稳定的。

转载于:https://my.oschina.net/u/2288283/blog/639084

你可能感兴趣的文章
Android项目之旅三 简易Mp3播放器从获取服务器端Mp3信息
查看>>
将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开
查看>>
无需SDK的统计工具,让哥赚了个iphone6
查看>>
没有做数据备份 网站随时毁于一旦
查看>>
Python学习笔记
查看>>
js中json与字符串转换小例子
查看>>
学习笔记-实验楼项目课(Linux桌面字典)
查看>>
Spring基础问答
查看>>
iOS8 相机拍照问题 Snapshotting a view
查看>>
comparable 接口的使用示例
查看>>
剑指Offer之重建二叉树(题6)
查看>>
strace-跟踪进程执行时的系统调用
查看>>
三个数找最大 1.0
查看>>
判断大端与小端
查看>>
计算机科学技术基础知识之多媒体知识
查看>>
如何禁用笔记本键盘
查看>>
第一次开博客,虽然有点晚了,用来鞭策激励一下自己,加油!
查看>>
4.4作业(变更管理+安全管理)
查看>>
(二)JSP语法详细介绍--指令元素
查看>>
python 数据库处理
查看>>