希尔排序(java实现)

来源:互联网 发布:mac oui ieee.org 编辑:程序博客网 时间:2024/05/16 12:16
/** * 算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数) * 分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插 * 入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中 * 再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序 * 完成。 * @author Administrator * */public class ShellSort{public int[] shellSort(int[] sortArray){//在这里进行分组int length = sortArray.length;int d = length;    //首先要保证可以对这个数组进行无限分组,知道只有一组为止。while(true){//分组进行中d = d/2;for(int i=0;i<d;i++){//对每个分组进行插入排序for(int j = i+d;j < length;j+=d){//保存这个要进行插入排序的数据int temp = sortArray[j];int m = j-d;//将这组里面的所有比插入值大的数据向后移动一个单位for(;m>=0&&sortArray[m]>temp;m-=d){sortArray[m+d]=sortArray[m];}    sortArray[m+d] = temp;   }}//对只有一组的情况下进行排序了就终止循环。if(d==1){break;}}return sortArray;}//测试方法    public static void main(String[] args) {int[] a = {10,3,4,5,6,7,1,2,9,8};int[] result = new ShellSort().shellSort(a);for(int i=0;i<result.length;i++){System.out.println(result[i]);}}}

原创粉丝点击