希尔排序(Java语言描述)

来源:互联网 发布:北京用友软件怎么样 编辑:程序博客网 时间:2024/05/17 03:12

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。

希尔排序使用一个序列h1,h2….ht,叫做增量序列,当ht=1时,其实就是插入排序了,但在插入排序进行前,就已经进行跨多元素间的(插入排序),而插入排序只能以1的元素间隔进行比较排序。


希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

import java.util.Random;/** * 希尔排序-基于插入排序增加增量概念,能横跨多个元素进行比较 * @author moxianbin */public class ShellSort {    /**     * 组建随机数组     * @param len     * @return     */    public static int[] get_intarr(int len){        long begin = System.currentTimeMillis();        Random ran = new Random();        int [] result = new int[len];        for(int i=0;i<len;i++){result[i] = ran.nextInt(10000); }        long runtime = System.currentTimeMillis()-begin;        System.out.println("组件随机数组运行时间:"+runtime);        return result;    }    /**     * 核心排序方法     * @param a     */    public static void sort(int []a){        long begin = System.currentTimeMillis();        for(int gap = a.length/2;gap>0;gap/=2){            for(int i=gap;i<a.length;i++){                int tmp = a[i];                for(int j=i-gap;j>=0 && a[j]>tmp;j-=gap){                    if(a[j]>tmp){                        a[j+gap]=a[j];                        a[j] = tmp;                    }                }            }        }        long runtime = System.currentTimeMillis()-begin;        System.out.println("排序运行时间:"+runtime);    }    public static void main(String[] args) {        int [] a = get_intarr(10000);        sort(a);//      for(int i=0;i<a.length;i++){System.out.println(a[i]);}    }}
0 0
原创粉丝点击