希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位,希尔排序每次移动位数可以通过实际情况来控制,
核心代码:
<pre><code>` func sort(arr:inout [Int]) {
let count:Int = arr.count
var gap:Int = 1
let base:Int = 3
while (gap < count / base) {
gap = base * gap + 1;
}
while gap > 0 {
for i in gap..<count {
for j in (gap...i).reversed() {
if arr[j] < arr[j-gap]{
swap(&arr[j], &arr[j-gap])
}
}
}
gap = gap / base
}
}`</code></pre>
测试代码:
<pre><code>var arr:[Int] = [10,8,1,5,3,4,9,0,7,11] let shellSort:ShellSort = ShellSort() shellSort.sort(arr: &arr) print("FlyElephant-希尔排序---\(arr)")
</code></pre>