算法逻辑 算法动画
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/
谢谢您的赞助,我会做的更好!