数据结构学习之 希尔排序

希尔排序(Shell Sort),是插入排序的一种,由D.L.Shell于1959提出而得名。

 

Shell排序通过将数据分成不同的组d,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。其中分组的合理性会对算法产生重要的影响。

Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很(这些数据是网上转载的,没有认真考证过)。但是Shell Sort 相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。

 

public class ShellSort {

	public static void shellSort(int[] arrSrc) {

		int d = arrSrc.length;
		while (d > 1) {

			d = (d + 1) / 2;
			for (int i = 0, length = arrSrc.length; i < length - d; i++) {

				if (arrSrc[i + d] < arrSrc[i]) {

					int tmp = arrSrc[i + d];
					arrSrc[i + d] = arrSrc[i];
					arrSrc[i] = tmp;
				}

			}
			System.out.println("当前这一遍处理时,d=" + d + " ,结果是:");
			for (int data : arrSrc) {

				System.out.print("   " + data);
			}
			System.out.println();

		}

	}

	public static void main(String[] args) {

		int[] arr = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };
		ShellSort.shellSort(arr);

	}

}

运行结果:

当前这一遍处理时,d=5 ,结果是:
   13   27   49   55   4   49   38   65   97   76
当前这一遍处理时,d=3 ,结果是:
   13   4   49   38   27   49   55   65   97   76
当前这一遍处理时,d=2 ,结果是:
   13   4   27   38   49   49   55   65   97   76
当前这一遍处理时,d=1 ,结果是:
   4   13   27   38   49   49   55   65   76   97

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值