zoukankan      html  css  js  c++  java
  • 排序03希尔排序

    一)定义

    希尔排序( shell sort )是 D .L.希尔( D.L.Shell )提出的“缩小增量”的排序方法。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。

    二)希尔排序的实现(java)

    public static void sort02(int a[]) {
    		double d1 = a.length;
    		while (true) {
    			d1 = Math.ceil(d1 / 2);
    			int d = (int) d1; //步长
    			for (int x = 0; x < d; x++) {//内部为一组数据的排序
    				//根据步长将分散的数据看出一个单独的数组,使用直接插入排序。
    				for (int i = x + d; i < a.length; i += d) {
    					int j = i;
    					int temp = a[j];
    					while (j >= d && temp < a[j - d]) {
    						a[j] = a[j - d];
    						j -= d;
    					}
    					a[j] = temp;
    				}
    			}
    			//步长为1运算完后,直接跳出。
    			if (d == 1)
    				break;
    		}
    	}
    
    	public static void main(String[] f) {
    		int[] a = new int[100000];
    		Random random = new Random();
    		for (int i = 0; i < a.length; i++) {
    			a[i] = random.nextInt(1000);
    		}
    		// a = new int[] { 6, 7, 51, 2, 52, 8 };
    		long bt = System.currentTimeMillis();
    		ShellSort.sort02(a);
    		System.out.println(System.currentTimeMillis() - bt);
    //		for (int a_ : a)
    //			System.out.println(a_);
    	}
    

    希尔排序和直接插入排序的效率比较:

    经过简单测试(对100000个随机整数进行排序),直接插入排序耗时约6300ms,希尔排序耗时约30ms。

  • 相关阅读:
    【转】给ExtJS的Grid增加两行tbar
    AWK使用手册
    SED单行脚本快速参考(Unix 流编辑器)
    Linux的用户和用户组管理
    Linux下中文man帮助安装。
    关于TLBB 客户端UI界面修改几个定义了解
    正则表达式30分钟入门教程
    VimDiff技巧
    CentOS 更换网易源
    Mysql数据库搭建Linux
  • 原文地址:https://www.cnblogs.com/huangfox/p/2568398.html
Copyright © 2011-2022 走看看