一、介绍
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
二、代码实现
/**
* Created by lysongzi on 16/3/2.
* 希尔排序
*
*/
public class ShellSort {
public static void sort(int[] arr){
int i, j, temp;
int gap = 1;
int len = arr.length;
while (gap < len / 3)
gap = gap * 3 + 1;
for (; gap > 0; gap /= 3)
for (i = gap; i < len; i++){
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] > temp; j-= gap)
arr[j + gap] = arr[j];
arr[j + gap] = temp;
}
}
}
三、参考资料
- 维基百科