数据结构与算法-----插入排序-----希尔排序

本文介绍了一种使用Java实现的希尔排序算法,通过调整数组元素的位置来实现从小到大的排序过程。该实现首先定义了一个整型数组,并展示了排序前后的数组状态。

还是老样子,先上分析图,然后上结果图,代码。


package jzoffer;


public class shellSortSmallToBig {
public static void main(String[] args) {
	int [] R = {10,9,8,7,6,5,4,3,2,1};
	System.out.println("原始数组如下:");
	printList(R);
	shellSortSmallToBig(R);
	System.out.println("经过希尔排序后数组如下:");
	printList(R);
	
}	
private static void printList(int [] a){
	for(int i =0;i<a.length;i++){
		System.out.print(a[i]+" ");
	}
	System.out.println("");
}
	public static void shellSortSmallToBig(int [] R){
		int k = R.length/2;
		int temp = 0;
		int x = 0;
		while(k >=1){//最终是增量为1,所以这块就这么判断了,主要是为了执行到最后
			for(int i = 0;i<k;i++){//一个for循环就是一趟排序
				for(int j=i+k;j<R.length;j+=k){//这个就是序列里面不可能只有两个数,有可能比两个数多的话,那就需要这 个for循环
					x = j-k;//主要为了记录一段增量的起始值 这里不可以用i 如果一个序列有三个值那么i肯定是行不通的
					temp = R[j];//记录一段增量的末端值
					while(x>=i && temp < R[x]){
						R[x+k] = R[x]; 
						x-=k;//这里主要起到两个作用,一个是退出循环
						     //另一个就是将下面temp的值赋值给初始值(x+k其实还等于x因为这里有个x-=k判断条件)
					}
					R[x+k] = temp;//不执行上面while循环与否 这句话都仅仅是一个赋值操作
				}
			}
			k = k/2;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值