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

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

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序 然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。 因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。   希尔排序使用序列 h1,h2,.....hn,叫做增量排序,假设hk是代表的步长,对于h1=1时,就是一次插入排序,对于hk躺排序后, 使得每一个i,都满足 a[i] < a[i+hk], (数组中每一个相隔hk元素都有序了)。而对于它的步长一般为 hk = [N/2]和 hk = hk+1/2;     对于希尔排序的最坏的时间复杂度为 O(n3/2) ,其证明的过程是相当复杂的.
java的代码如下:
public static void sort(int[] a){    //步长    for(int gap = a.length/2 ,size=a.length; gap > 0; gap = gap/2){        for(int k=gap; k < size; k++) {            int temp = a[k];            int j= k;            for (; j >= gap && a[j] < a[j - gap]; j = j - gap) {                a[j] = a[j - gap];            }            a[j] = temp;        }    }    Arrays.stream(a).forEach(System.out::println);}

 

 

转载于:https://www.cnblogs.com/xjz1842/p/6094256.html

你可能感兴趣的文章
wordpress迁移服务器指南
查看>>
快速排序法
查看>>
C/C++中的预编译指令
查看>>
C# 标签的添加和删除(选择标签加样式)
查看>>
SpringMvc 大概流程分析
查看>>
JMeter记录篇5——JMeter体系结构
查看>>
读写(I/O)辩论
查看>>
Jmeter (一) 安装
查看>>
grep文本搜索工具详解
查看>>
2016031801 - 给移动硬盘分区
查看>>
Android Toast小解
查看>>
数据结构与算法问题 二叉排序树
查看>>
JAVA获取操作系统的信息
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
使用 Python 把多个 MP4 合成一个视频(转)
查看>>
php 递归无线级别分类
查看>>
Struts2 简单的增删改查
查看>>
浏览器F12之后-----你不一定不知道的事
查看>>
总想对你表白
查看>>
BSGS算法及拓展
查看>>