Java常见的排序算法---希尔排序

Posted PandaEyes丶JAVA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常见的排序算法---希尔排序相关的知识,希望对你有一定的参考价值。

package cn.gsm.xmm.sort;
/** * @ClassName XiErSort * @Description 希尔排序 * @Author XiongChun * @Date 2019/3/7 0007上午 09:00 * @Version 1.0 **/public class XiErSort { public static void main(String[] args) { int[] arrays = new int[]{51,56,4,548,52,59,84,12,35,885,582,64,54,684}; //首先先定义一个增量---定义增量的算法有多种,这里就用简单的一种 int incrementNum = arrays.length/2; //与最下面的 更改跨度相结合,决定跳出循环的时机 while (incrementNum>0){ //由于内循环每次都是 跳一个跨度 ,所以这里就必须从最小的跨度开始 for (int i = incrementNum; i < arrays.length; i++) { //每次 都 跳一个跨度 。并且 j>=0 注意的是=0也是需要 跳一次的。 for(int j=i-incrementNum; j>=0 ; j = j-incrementNum){ //进行比较 if(arrays[j]>arrays[j+incrementNum]){ int temp = arrays[j]; arrays[j]=arrays[j+incrementNum]; arrays[j+incrementNum] = temp; } } } //更改跨度 incrementNum = incrementNum/2; } //排序后 for (int arry : arrays) { System.out.print(arry+"、"); } }}

希尔排序是插入排序的一种优化,极端情况下,插入排序的数据交换次数非常多,性能差;

据研究希尔排序时间复杂度O(n^1.3)。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止


实现思路:

1. 获取原始待排记录的元素个数len,并计算初始增量d=len/2

2. 通过d = d/2进行循环,对待排记录进行分组,d作为增量值,每间隔d的元素被划分到一组

3. 对2中每组元素进行直接插入排序算法进行排序

4. 重复2,3的过程,直到2中计算的增量d=1的这轮排序结束,程序退出,排序完成


以上是关于Java常见的排序算法---希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

常见排序算法代码总结(Java版)

几种常见的排序算法分析学习

常见排序算法总结(java实现)

常见排序算法-希尔排序

知了堂学习笔记java 编写几种常见排序算法3

常见的七种排序算法(Java实现)