希尔排序 其实是对 插入排序的一种优化,
把一个数组 按照一个量分成几个小组,对规则下 若干个下标 上的元素值进行排序,逐渐缩小增量,
再排序,最后增量为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