希尔排序算法笔记

1,思想:对序列相同间隔上的元素使用插入排序,同时不断减小间隔直到间隔为1。间隔选取公式,通常为:h=3*h+1(h初始1)。通过增大移动距离,减少移动次数的方式使之比普通插入排序更高效。

2,效率:时间复杂度约N的1.5次方。

3,Java代码实现:


public class ShellSorter {

	public static void shellSort(int[] array) {
		int len = array.length;
		int h = 1;
		while (h <= len / 3) {// find max h.
			h = h * 3 + 1;
		}
		//

		int outer = 0;
		int inner = 0;
		int tmp = 0;

		while (h > 0) {

			for (outer = h; outer <= len - 1; outer++) {// 一次for循环会将所有当前间隔上的元素排成有序。
				tmp = array[outer];
				inner = outer;
				while (inner > h - 1 && array[inner - h] >= tmp) {// 对当前间隔上的元素应用插入排序。
					array[inner] = array[inner - h];
					inner -= h;
				}

				array[inner] = tmp;

			}// for end.

			h = (h - 1) / 3;

		}// while.

	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值