Swift之算法:插入排序

Posted SwiftClub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift之算法:插入排序相关的知识,希望对你有一定的参考价值。


目的: 

把数组从低到高(或从高到低)排序

工作原理:

  • 把一系列数字放在一个未排序的堆里。

  • 从堆中挑选一个数字。 你选择哪一个并不重要,但从堆顶挑选是最容易。

  • 把这个数插入一个新的数组。

  • 从未排序堆中再选择一个数字,并将其插入之前的数组中。 这个数字在第一个数字之前或之后,所以现在这两个数字被排序。

  • 再从堆中选择一个数字,并将其插入到数组中的正确排序位置

  • 继续这样做,直到堆里没有数字。 最终得到一个空堆和一个排序的数组。


例子:


[8, 3, 5, 4, 6]

  1. 选择第一个数字 8,然后将其插入新数组中。 新数组是空的,所以插入很容易。 排序的数组现在是 [8],堆是 [3,5,4,6]。

  2. 从堆中选择下一个数字 3,然后将其插入到已排序的数组中。 3 应该在 8 之前,所以排序的数组现在是 [3,8],而堆被缩减为 [5,4,6]

  3. 从堆中选择下一个数字 5,然后将其插入到已排序的数组中。 5 介于 3 和 8 之间。 排序的数组是 [3,5,8],堆是 [4,6]。

  4. 重复上面的过程直到堆为空。


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之算法:插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

10分钟看懂10大经典算法(Swift代码实现)

面试之插入排序算法

数据结构与算法之排序算法:插入排序

重温基础算法内部排序之插入排序法

排序算法之插入排序