插入排序算法讲解及swift代码实现
插入排序也是一个两级循环:
- 外层循环的边界是[1, array.count),索引是i。
- 内循环以初始索引 j = i 开始,然后使用 while 循环。循环条件为
j>0 && Array[j] ,循环内部交换 j-1 和 j 的元素,使 j-1。很容易理解,如果当前元素比前一个元素小,则切换位置;否则执行下一个外循环。
我们来看看手写迭代的插入排序机制。使用的数组与上面的选择排序数组相同: [4, 1, 2, 5, 0]
i = 1 :
- j = 1: array[1 ] [1, 4, 2, 5, 0],j-1不符合内循环条件,退出内循环,i+1。 如果
i = 2: i = 3,:
如果
i = 4: 从上面的描述可以看出,相比选择排序,插入排序的内循环可以提前启动,条件是 我们来看看如何通过代码来实现插入排序算法: 从上面的代码中我们可以看到插入排序内循环的条件:❀j > 0 && array [j] array[j] > = Array[ j - 1],即只要当前索引为j的元素比前一个元素大,那么内循环就立即退出,不需要再次排序,因为算法把小的放到了从一开始就是第一个。 ,把大的放在后面。 代码实现
func insertionSort(_ array: inout [Int]) -> [Int] {
guard array.count > 1 else { return array }
for i in 1..<array.count {
var j = i
while j > 0 && array[j] < array[j - 1] {
array.swapAt(j - 1, j)
j -= 1
}
}
return array
}
复制代码
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网