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常见的排序算法---希尔排序的主要内容,如果未能解决你的问题,请参考以下文章