算法3:希尔排序
基本思想
- 希尔排序是基于插入排序的一种快速排序算法
- 对于大规模乱序数组来说,插入排序很慢。因为它只会交换相邻的元素,因此元素只能一点点地从数组的一端移动到另一端。比如说,如果最小的元素恰好在数组的末尾,要将它挪到正确的位置,插入排序要进行N-1次挪动。
- 希尔排序是为了加快插入排序,每次不再只和相邻的元素交换,而是每次交换不相邻(间隔为h)的元素来对数组进行局部排序,h逐渐递减为1,当h=1时,希尔排序实际上退化为插入排序,也就是说最终是使用插入排序将局部有序的数组排好序。
特点
- 希尔排序的思想是使任意间隔为h的元素有序。这样的数组称为h有序数组。举个例子,假如有下面这样的乱序数组,h取5。
则希尔排序第一次迭代会使得
第1位元素:8和第6(1+5)位元素:9,有序
第2位元素:1和第7(2+5)位元素:10,有序
第3位元素:5和第8(3+5)位元素:2,有序,变成2,5
第4位元素:6和第9(4+5)位元素:3,有序,变成3,6