希尔排序
概述:基于插入排序思想,又称为希尔排序或减小增量排序
排序的流程如下:
- 1.将有n个元素的数组分为n/2个数组数列,第1个数据和第n/2+1个数据为一对,……
- 2.一次循环使每一个序列对排好顺序
- 3.然后,在变为n/4个序列,再次排序
- 4.不断重复上述过程直到序列(间隔)减少变为一个,也就完成了整个排序
希尔排序其实就是插入排序,只不过插入排序的插入位置的变化幅度小,为1,而希尔排序插入位置的变化幅度大。希尔排序可以看做是对插入排序的一种优化
举例实现
package com.linchong.bubblesort; /** * shell排序 * @version: * @author:linchong * @date:2018年6月2日 下午4:36:48 * @Description:(方法功能描述) * 概述:基于插入排序思想,又称为希尔排序或减小增量排序 * 排序的流程如下: * 1.将有n个元素的数组分为n/2个数组数列,第1个数据和第n/2+1个数据为一对,...... * 2.一次循环使每一个序列对排好顺序 * 3.然后,在变为n/4个序列,再次排序 * 4.不断重复上述过程直到序列减少变为一个,也就完成了整个排序 */ public class ShellSort { static final int SIZE = 10; static void shellSort(int[] a){ int i,j; int r,temp; int x = 0; for (r = a.length / 2; r >= 1; r /= 2) //划分小组进行排序 { for (i = r; i < a.length; i++) { temp = a[i]; j = i - r; while (j >= 0 && temp < a[j]) { a[j + r] = a[j]; j -= r; } a[j + r] = temp; } x++; System.out.println("第"+x+"步的排序结果为"); for (int k : a) { System.out.print(k+" "); } System.out.print("\n"); } } public static void main(String[] args) { int[] array = new int[SIZE]; int i; for(i=0;i<SIZE;i++){ array[i] = (int)(100+Math.random()*(100+1)); } System.out.println("排序前的数组为:"); for (int j : array) { System.out.print(j+" "); } System.out.printf("\n"); shellSort(array); System.out.println("排序后的数组为:"); for (int k : array) { System.out.print(k+" "); } } }