希尔排序

简介:     算法逻辑                                                                               算法动画      import java.

 

 

算法逻辑                                                                               算法动画



 
 

 

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/



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

目录
相关文章
|
15天前
|
搜索推荐
希尔排序
希尔排序。
14 6
希尔排序是什么
希尔排序:外套一层间隔逐步缩小的循环的插入排序
|
6月前
直接插入排序与希尔排序
直接插入排序与希尔排序
42 2
|
6月前
|
搜索推荐 Shell C++
C++希尔排序的实现
C++希尔排序的实现
|
6月前
|
搜索推荐
直接插入排序和希尔排序
直接插入排序和希尔排序
69 0
|
算法 搜索推荐 Shell
18 希尔排序
18 希尔排序
31 0
插入排序与希尔排序
插入排序与希尔排序
53 0
|
搜索推荐 算法 C#
C#——希尔排序
C#——希尔排序
92 0