let N = Int(readLine()!)!
var arr = [Int]()
for _ in 0..<N {
arr.append(Int(readLine()!)!)
}
arr = mergeSort(arr)
arr.forEach {
print($0)
}
func mergeSort(_ array: [Int]) -> [Int] {
guard array.count > 1 else { return array }
let middle = array.count / 2
let leftArray = mergeSort(Array(array[0..<middle]))
let rightArray = mergeSort(Array(array[middle..<array.count]))
return merge(leftArray, rightArray)
}
func merge(_ leftArray: [Int], _ rightArray: [Int]) -> [Int] {
var leftIndex = 0
var rightIndex = 0
var sortedArray = [Int]()
while leftIndex < leftArray.count && rightIndex < rightArray.count {
let leftElement = leftArray[leftIndex]
let rightElement = rightArray[rightIndex]
if leftElement < rightElement {
sortedArray.append(leftElement)
leftIndex += 1
} else {
sortedArray.append(rightElement)
rightIndex += 1
}
}
while leftIndex < leftArray.count {
sortedArray.append(leftArray[leftIndex])
leftIndex += 1
}
while rightIndex < rightArray.count {
sortedArray.append(rightArray[rightIndex])
rightIndex += 1
}
return sortedArray
}
병합 정렬을 사용해서 풀었다.
정렬 개념은 다 이해하고 있긴 한데 스위프트에서 구현해보는 건 쉽지가 않다..