`
knight_black_bob
  • 浏览: 822934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

希尔排序

阅读更多

 

 

算法逻辑                                                                               算法动画



 
 

 

import java.util.Arrays;

/**
 * <pre>
 *  步骤1:比如现在有数组{82 ,31 ,29 ,71, 72, 42, 64, 5,110}   第一次取增量设置为array.length/2 = 4    
 *  先从82开始以4为增量遍历直到末尾,得到(82,42) 排序得到{42 ,31 ,29 ,71, 72, 82, 64, 5,110}。 
 *  然后从第二个数31开始重复上一个步骤,得到(31,64) 排序得到{42 ,31 ,29 ,71, 72, 82, 64, 5,110}.......  
 *   以4为增量的遍历完数组之后,得到的结果是{42 ,31,5,71,72,82,64,29,110}
 * 然后重新区增量,这儿设定为incrementNum/2 = 2,对{42 ,31,5,71,72,82,64,29,110}重复步骤1。  
 *  完事之后,在取新的增量,重复步骤1。 直到取到的增量小于1,退出循环。
 * </pre>
 * 博客詳細 
 * http://blog.csdn.net/jianyuerensheng/article/details/51258460
 * 图片详细
 * http://img.blog.csdn.net/20160426213625152
 * @author baoy
 *
 */
public class ShellSort {

	public static void main(String[] args) {
		int[] data = new int[] { 26, 53, 67, 48, 57, 13, 48, 32, 60, 50 }; 
		shellsort(data); 
	}

	public static void shellsort(int[] a) {
		for (int increment = a.length / 2; increment > 0; increment /= 2) {
			for (int k = 0; k < increment ; k++) {
				for (int i = k; i < a.length; i += increment) {
					for (int j = i + increment; j < a.length; j += increment) {
						if (a[i] > a[j]) {
							swap(a, i, j);
						}
					}
				}
			}
			System.out.println(Arrays.toString(a));
		} 
	} 
	
	public static int[] swap(int[] a, int i, int j) {
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
		return a;
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者 

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。

 

个人主页http://knight-black-bob.iteye.com/



 
 
 谢谢您的赞助,我会做的更好!

  • 大小: 47.2 KB
  • 大小: 741 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics