Swift之算法:插入排序
Posted SwiftClub
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift之算法:插入排序相关的知识,希望对你有一定的参考价值。
目的:
把数组从低到高(或从高到低)排序
工作原理:
把一系列数字放在一个未排序的堆里。
从堆中挑选一个数字。 你选择哪一个并不重要,但从堆顶挑选是最容易。
把这个数插入一个新的数组。
从未排序堆中再选择一个数字,并将其插入之前的数组中。 这个数字在第一个数字之前或之后,所以现在这两个数字被排序。
再从堆中选择一个数字,并将其插入到数组中的正确排序位置
继续这样做,直到堆里没有数字。 最终得到一个空堆和一个排序的数组。
例子:
[8, 3, 5, 4, 6]
选择第一个数字 8,然后将其插入新数组中。 新数组是空的,所以插入很容易。 排序的数组现在是 [8],堆是 [3,5,4,6]。
从堆中选择下一个数字 3,然后将其插入到已排序的数组中。 3 应该在 8 之前,所以排序的数组现在是 [3,8],而堆被缩减为 [5,4,6]
从堆中选择下一个数字 5,然后将其插入到已排序的数组中。 5 介于 3 和 8 之间。 排序的数组是 [3,5,8],堆是 [4,6]。
重复上面的过程直到堆为空。
func insertionSort(_ arr:[Int]) -> [Int] {
var ret = arr
for x in 1..<ret.count {
var y = x
let tmp = ret[y]
while y > 0 && tmp < ret[y - 1] {
ret[y] = ret[y-1]
y -= 1
}
ret[y] = tmp
}
return ret
}
let arr = [5,8,4,7,9,1,6]
let ret = insertionSort(arr)
性能:
如果数组是已经排好序的话,插入排序是非常快速的
插入排序的最差和平均性能是 O(n^2)。这是因为在函数里有两个嵌套的循环
以上是关于Swift之算法:插入排序的主要内容,如果未能解决你的问题,请参考以下文章