八大排序算法 之 希尔排序(缩小增量排序)

排序思想:

1,希尔排序属于插入排序算法;

2,希尔排序是插入排序算法的优化,插入算法在插入过程中要移动很多次数字,几趟下来,移动次数就多不胜数,希尔排序的思想是先设法将数组排列成大致有序的,这样再进行插入排序是就会减少大量移动,从而优化算法

3,将数组调整成大致有序的步骤按照原理被称为缩小增量法,即每次拿一个数跟(增量间隔)后的数比较,按大小调整位置(调整方法为插入排序法),每趟执行完后增量减少一半,依次类推,直到增量减少为1,即进行最后一次的直接插入排序(可参考本系列直接插入排序算法帖子);

4,参考图片:

八大排序算法 之 希尔排序(缩小增量排序)_第1张图片

排序趟数:如果2^n

如此例,length = 10 > 8,趟数是3.

排序原理:

建立增量d,间隔比较,插入方法排序---依次缩小增量,继续排序---当增量缩小为1,进行一次最后排序(直接插入排序)

代码实现如下:

//希尔排序
	public static void shellSort(int[] array){
		int d = array.length / 2;
		while(d >= 1){
			//采用插入排序的思想将增量间隔的数字排序,当增量为1时,即跟直接插入排序相同
			for (int i = d; i < array.length; i++) {
				int temp = array[i];
				int j = i - d;
				while(j >= 0 && temp < array[j]){
					array[j + d] = array[j];
					j -= d;
				}
				array[j + d] = temp;
			}
			d /= 2;//增量每次减小
		}
	}


你可能感兴趣的:(java)