希尔排序

希尔排序

简介

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

算法原理

将待排序数组进行分组(相隔某个增量),对每一组进行直接插入排序,完成一次后,将增量减半,在进行分组直接插入排序,直到增量减为1,整个数组只有一组,变为直接插入排序。排序完成。
假设数组最小的元素在最后一位,用直接插入排序的话,要比较n-1次,移动n-1位,希尔排序可以跳着比较和移动,比较次数和移动次数明显比直接插入排序小。

代码实现

public static int[] shellSort(int[] a){
		int h=a.length/2;//选取步长为数组长度的一半
		int temp;//临时变量
		while(h>=1){  
			for(int i=h;i<a.length;i++)
			{
				temp=a[i];//a[i]为要插入的元素
				int j=i-h;
				while(j>=0&&temp<a[j])//如果符合条件
				{
					a[j+h]=a[j]; //所有符合的元素向后移动h位
					j-=h;//j依次递减步长
				}
				a[j+h]=temp;
			}
			h=h/2;  
		}
		return a;
	}
posted @ 2017-07-25 16:21  Lee_Shuai  阅读(92)  评论(0编辑  收藏  举报