黑马程序员技术博客之希尔排序

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

以下是我编写的希尔排序代码:

/**
我对希尔排序的粗浅理解:
	先对数组中小标间隔为一定值的数进行排序
	而后逐渐缩小这种间隔,直至间隔为1,完成排序
@author shine
*/
import java.util.Arrays;
public class Shine01{
	public static void main(String[] args){
		int[] ints = {12,34,5,54,35,2,78,62,85,35,9,6,18,24,38,42};
		System.out.println(Arrays.toString(order(ints)));
	}
	public static int[] order(int[] ints){
		int d = ints.length;
		while(true){
			d = d/2;
			for(int i=0; i<d; i++){
				//下面这个嵌套for循环实际上实现了...>a[i+2d]>=a[i+d]>=a[i]的功能
				for(int j=i+d; j<ints.length; j+=d){
					int temp = ints[j];
					int k;
					for(k=j-d; k>=0&&ints[k]>temp; k-=d){
						ints[k+d] = ints[k];
					}
					ints[k+d] = temp;
				}
			}
			//具体实现方法如下:
			//首先保证所有下标间隔为d的数间的排序,如:a[8]>a[0],a[9]>a[1],a[10]>a[2]……
			//随后缩小下标的间隔,如:a[12]>a[8]>=a[4]>=a[0],a[13]>a[9]>=a[5]>=a[1]……
			//并进一步缩小,如:a[14]>a[12]>a[10]>a[8]>a[6]>a[4]>a[2]>a[0],……
			//直至d=1,即:a[15]>a[14]>a[13]>a[12]>……,至此排序完成
			if(d==1)
				return ints;
		}
	}
}
一时兴起就写了这个代码,算法参考了一个哥们用C写的一段代码,也看了百度百科对希尔排序的分析,但感觉讲的不太清晰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值