希尔排序

希尔排序又称缩小增量排序,就是分组插入排序,是直接插入排序的改进版

int data[];

int d = data.length/2;

先对跨度为d的数据进行直接插入排序,再对跨度为d=d/2的数据进行直接插入排序,如此循环直到d=0为止。

当d比较大时,进行排序的数据量较小,数度较快,当d较小时,由于先前的操作使得数据比较有序,而直接插入排序在数据有序时是很快的,所以希尔排序比直接插入排序要快

java代码

import java.util.Scanner;
import java.util.Arrays;
class Main{
    public static void main(String[] args){
        int[] data = new int[]{1100,192,221,12,23,1,24,56,89,2};
        System.out.println(Arrays.toString(data));
        shellSort(data);
        System.out.println("排序后的数组:");
        System.out.println(Arrays.toString(data));
    }
    
    public static void shellSort(int[] data){
        int temp;
        int d = data.length/2;          //d是子表间隔
        while(d!=0){                    //循环直到d=0为止
            for(int i=d;i<data.length;i++){     //一趟直接插入排序
                temp = data[i];
                int j;
                for(j=i;j>=d;j-=d){
                    if(temp<data[j-d])
                        data[j] = data[j-d];
                    else 
                        break;
                }
                data[j] = temp;
            }
            d/=2;                                 //修改子表间隔
        }
    }
}

 

posted @ 2015-05-14 10:19  杨永华  阅读(96)  评论(0编辑  收藏  举报