数据结构复盘——希尔排序(Java)

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

        //第一轮从D=5开始 分成5组 每组2个元素 
        过程省略...
        排序为:3 5 1 6 0 8 9 4 7 2 
        
		//第二轮从D=2开始  分成2组 每组5个元素 
		//i=2 j=2 [1 5 3 6 0 8 9 4 7 2] 交换
	    //i=3 j=3 [1 5 3 6 0 8 9 4 7 2] 保持
		//i=4 j=4 [1 5 0 6 3 8 9 4 7 2] 交换
		//    j=2 [0 5 1 6 3 8 9 4 7 2] 交换
		//i=5 j=5 [0 5 1 6 3 8 9 4 7 2] 保持
		//    j=3 [0 5 1 6 3 8 9 4 7 2] 保持
		//i=6 j=6 [0 5 1 6 3 8 9 4 7 2] 保持
		//    j=4 [0 5 1 6 3 8 9 4 7 2] 保持
		//    j=2 [0 5 1 6 3 8 9 4 7 2] 保持
		//i=7 j=7 [0 5 1 6 3 4 9 8 7 2] 交换
		//    j=5 [0 5 1 4 3 6 9 8 7 2] 交换
		//    j=3 [0 4 1 5 3 6 9 8 7 2] 交换
		//i=8 j=8 [0 4 1 5 3 6 7 8 9 2] 交换
		//    j=6 [0 4 1 5 3 6 7 8 9 2] 保持
		//    j=4 [0 4 1 5 3 6 7 8 9 2] 保持
		//    j=2 [0 4 1 5 3 6 7 8 9 2] 保持
		//i=9 j=9 [0 4 1 5 3 6 7 2 9 8] 交换
		//    j=7 [0 4 1 5 3 2 7 6 9 8] 交换
		//    j=5 [0 4 1 2 3 5 7 6 9 8] 交换
		//    j=3 [0 2 1 4 3 5 7 6 9 8] 交换
		
		//第三轮从D=1开始 终止
		//i=1 j=1 [0 2 1 4 3 5 7 6 9 8] 保持
		//i=2 j=2 [0 1 2 4 3 5 7 6 9 8] 交换
		//    ...
		//i=3 j=3 [0 1 2 4 3 5 7 6 9 8] 保持
		//    ...
		//i=4 j=4 [0 1 2 3 4 5 7 6 9 8] 交换
		//    ...
		//i=5 j=5 [0 1 2 3 4 5 7 6 9 8] 保持
	    //        ...
		//i=6 j=6 [0 1 2 3 4 5 7 6 9 8] 保持
		//        ...
		//i=7 j=7 [0 1 2 3 4 5 6 7 9 8] 交换
		//        ...
		//i=8 j=8 [0 1 2 3 4 5 6 7 9 8] 保持
		//        ...
	    //i=9 j=9 [0 1 2 3 4 5 6 7 8 9] 保持
		//        ...
package sort;

/*
 * 插入排序——希尔排序
 */

public class insert_shell {
	public static void main(String[] args) {
		int[] a={8,9,1,7,2,3,5,4,6,0};
		
		System.out.println("排序前:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println("\n");
		
		shell_sort(a);
	}
	
	public static void shell_sort(int[] a) {
		int temp=0;
		
		for (int D = a.length/2; D >0 ; D/=2) {//增量序列
			for (int i = D; i < a.length; i++) {
				temp=a[i];
				for (int j = i; j >=D && a[j-D]>temp; j-=D) {
					a[j]=a[j-D];
					a[j-D]=temp;
				}
			}
		}
		
		System.out.println("排序后:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
	}
}

数据结构复盘——希尔排序(Java)_第1张图片

你可能感兴趣的:(数据结构,java)