希尔排序 其实是对 插入排序的一种优化,
把一个数组 按照一个量分成几个小组,对规则下 若干个下标 上的元素值进行排序,逐渐缩小增量,
再排序,最后增量为1,就是一步插入排序
import java.util.Arrays; public class Array { // 把11个数的数组,分成三组 static void group(){ //0 5 10; 1 6 ; 2 7 ; 3 8 ;4 9 int [] ia = {49, 38, 65, 97, 26, 13, 27, 49, 55, 4,11}; // 把数组分成三组 int gap = ia.length/2; int count = 0; while(count<gap){ int i = count; while(i<ia.length){ System.out.println(ia[i]); i = i+gap; } count++; } } // 希尔排序 static void shellSort(){ int [] ia = {49, 38, 65, 97, 26, 13, 27, 49, 55, 4,11}; System.out.println("原始数据:"+ Arrays.toString(ia)); // 把数组分成三组 int gap = ia.length/2; // 0 5 10; 1 6 ; 2 7 ; 3 8 ;4 9 int count = 0; while (gap>=1) { while(count<gap) { int original = count+gap; // 表示从每组的哪个下标开始进行插入排序 ,即从 // 每组第二个下标开始的 5,6,7,8,8,9开始进行插入排序 while(original<ia.length) { int current = original; // current 当前要 进行插入排序的元素的下标 int previous = original-gap; while(previous>=0 && (ia[previous]>ia[current])) { // if() { int temp ; temp = ia[previous]; ia[previous] = ia[current] ; ia[current] = temp; current = current-gap; previous = previous-gap; // } } original = original+gap; } //original<ia.length while end count++; } System.out.println(Arrays.toString(ia)); //打印每趟循环后的元素变化 gap = gap/2; count = 0; } System.out.println("排好序的数据"+Arrays.toString(ia)); } /** * @param args */ public static void main(String[] args) { shellSort();
本文出自 “JAVA那些事儿” 博客,请务必保留此出处http://1027187712.blog.51cto.com/5509347/1623771
原文:http://1027187712.blog.51cto.com/5509347/1623771