希尔排序(java实现)

/**
 * 	算法先将要排序的一组数按某个增量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]);
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值