Когда вы нарезаете Array
, вы получаете ArraySlice
. Когда вы нарезаете ArraySlice
, вы получаете еще ArraySlice
. Это свойство, T.SubSequence == T
, жизненно важно для создания рекурсивного алгоритма, подобного этому, так что вам нужно работать только с одним типом.
Вам необходимо, чтобы ваша рекурсивная функция работала с ArraySlice
, но вы можете сделать функцию-обертку, которая принимает массив и выполняет необходимое преобразование.
func quickSort(_ array: inout [String]) {
func quickSort(_ slice: inout ArraySlice<String>) {
if let first = slice.first {
var (left, right) = partition(&slice, pivot)
quickSort(&slice[0..<left]) // This part of the algorithm will break...
}
}
quickSort(ArraySlice(array))
}