У меня проблема с инверсией обращения с Swift. Мне требуется 45 минут, и через 45 минут происходит сбой Xcode. Я никогда не получаю ответа. Можете ли вы мне помочь, чтобы выяснить, в чем проблема? Потому что эта проблема заняла у людей всего несколько секунд. Что не так с кодами? Btw проблемы подсчета инверсии в массиве (100000 несортированных целые числа)Подсчет инверсий с сортировкой слияний, Swift
import UIKit
var count: Int = Int()
func mergeSort(_ array: [Int]) -> [Int] {
guard array.count > 1 else { return array }
let middleIndex = array.count/2
let leftArray = mergeSort(Array(array[0..<middleIndex]))
let rightArray = mergeSort(Array(array[middleIndex..<array.count]))
return merge(leftPile: leftArray, rightPile: rightArray)
}
func merge(leftPile: [Int], rightPile: [Int]) -> [Int] {
var leftIndex = 0
var rightIndex = 0
var orderedPile = [Int]()
while leftIndex < leftPile.count && rightIndex < rightPile.count {
if leftPile[leftIndex] < rightPile[rightIndex] {
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
} else if leftPile[leftIndex] > rightPile[rightIndex] {
orderedPile.append(rightPile[rightIndex])
count += leftPile.count - leftIndex
rightIndex += 1
} else {
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
orderedPile.append(rightPile[rightIndex])
rightIndex += 1
}
}
while leftIndex < leftPile.count {
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
}
while rightIndex < rightPile.count {
orderedPile.append(rightPile[rightIndex])
rightIndex += 1
}
return orderedPile
}
func ready(fileName: String) -> [Int] {
guard let path = Bundle.main.path(forResource: fileName, ofType: "txt") else {
return [Int]()
}
do {
let numbers = try String(contentsOfFile: path).components(separatedBy: "\r\n")
.flatMap {Int($0)}
mergeSort(numbers)
return numbers
} catch {
return [Int]()
}
}
ready(fileName: "IntegerArray"))
print(count)
Где это крах и что стек трассировку? Правильно ли работает ваш код с небольшими массивами? Вы пытались * отладить * проблему? –
Я много раз пробовал с небольшими массивами. Он работает отлично. Он падает, когда количество заказанных кучей достигает 24999 раз, и для достижения этой цели мне потребовалось 45 минут. –