ShellSort

本文介绍了一种高效的插入排序改进版本——希尔排序。通过使用递减的增量序列,希尔排序能够显著提高排序效率。文章详细解释了希尔排序的工作原理,并提供了一个具体的Java实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

将数组列在一个表中并对列排序(用插入排序)。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序。


package com.maogh.sort;
/**
 * shell sort
 * @author wikipedia
 *
 */
public class ShellSort implements Sort {
	@Override
	public float[] sort(float[] a) {
		int i, j, k, gap;
		float temp;
		int n = a.length;
		int[] gaps = { 1, 5, 13, 43, 113, 297, 815, 1989, 4711, 11969, 27901,
				84801, 213331, 543749, 1355339, 3501671, 8810089, 21521774,
				58548857, 157840433, 410151271, 1131376761, 2147483647 };
		// 获得步数
		for (k = 0; gaps[k] < n; k++)
			;

		while (--k >= 0) {
			gap = gaps[k];
			for (i = gap; i < n; i++) {
				temp = a[i];
				j = i;
				while (j >= gap && a[j - gap] > temp) {
					a[j] = a[j - gap];
					j = j - gap;
				}
				a[j] = temp;
			}
		}
		return a;
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值