希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
代码:
/**
* @描述 希尔排序
* @项目名称 Java_DataStruct
* @包名 com.struct.array
* @类名 ArraySort
* @author chenlin
* @date 2010年6月22日 下午8:28:46
*/
public class ShellSort {
/**
* 使用间隔插入法,先把最大的值移动到后面,然后进行插入排序
*
* @param arr
*/
public static void shellSort1(long[] arr) {
int h = 1;
while(h < arr.length / 3){
h = 3*h +1;
}
while(h > 0){
long temp = 0;
for (int i = h; i < arr.length; i++) {
temp = arr[i];
int j = i;
while (j > h - 1 && arr[j - h] >= temp) {
// 把大的值往后移动
arr[j] = arr[j - h];
j-= h;
}
// 当j--时,把temp值移动到小值的位置
arr[j] = temp;
}
h = (h-1)/3;
}
list(arr);
}
public static void list(long[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("");
}
public static void main(String[] args) {
long arr[] = { 22, 33,33, 44, 11, -1, 23, 43, 54, 0, 98 , 44, 43, 33, 33, 33};
shellSort1(arr);
}
}