当按降序对数字进行排序时,我有这个函数来快速 Select 分区.该函数引用了在其作用域之外定义的arr
(分区是另一个函数中的嵌套函数).
我的问题是,由于SWIFT中的数组是值类型,所以当我进行交换时,每次都会创建一个新的副本吗?或者相同的内存被覆盖了吗?
将函数定义为partition(start: Int, end: Int, arr: inout [(Int, Int)])
是不是更好,这样arr就可以通过引用传递?
接下来的问题,当我们做arr.append((4, 8))
时会发生什么?这会在内存中创建一个新的副本吗?
var arr = [(Int, Int)]() // [(1, 2), (3, 5), (2, 8)]
func partition(start: Int, end: Int) -> Int {
var swap = start
for i in start..<end {
if arr[i].1 > arr[end].1 {
(arr[i], arr[swap]) = (arr[swap], arr[i]) // arr copied on write?
swap += 1
}
}
(arr[end], arr[swap]) = (arr[swap], arr[end]) // arr copied on write?
return swap
}