Swiftでクイックソートを実装する
#Swift
環境
code:sh
$swift --version
swift-driver version: 1.82.2 Apple Swift version 5.9 (swiftlang-5.9.0.114.10 clang-1500.0.29.1)
Target: arm64-apple-macosx14.0
モチベーション
実装したことが無い気がするのでやっておく
/icons/hr.icon
簡単のため配列の長さは奇数で。
1回目
code:swift
func solve(_ array: Int) -> Int {
let pivot = arrayarray.count / 2
var left: Int = []
var right: Int = []
for (i, a) in array.enumerated() {
if i == array.count / 2 {
continue
}
if a <= pivot {
left.append(a)
} else {
right.append(a)
}
}
left.append(pivot)
let newArray = left + right
var success = true
let newArrayCount = newArray.count
for i in newArray.indices {
if i == newArrayCount - 1 {
break
}
if newArrayi <= newArrayi + 1 {
continue
} else {
success = false
break
}
}
if success {
return newArray
} else {
return solve(newArray)
}
}
let array = 3, 7, 8, 5, 2, 1, 9, 5, 4
let answer = solve(array)
print(answer) // 1, 2, 3, 4, 5, 5, 7, 8, 9
2回目
code:swift
func solve(_ array: Int) -> Int {
let pivotIndex = array.count / 2
let pivot = arraypivotIndex
var left: Int = []
var right: Int = []
for (i, a) in array.enumerated() {
if i == pivotIndex {
continue
}
if a <= pivot {
left.append(a)
} else {
right.append(a)
}
}
left.append(pivot)
let newArray = left + right
let newArrayCount = newArray.count
for i in newArray.indices {
if i == newArrayCount - 1 {
break
}
if newArrayi > newArrayi + 1 {
return solve(newArray)
}
}
return newArray
}
let array = 3, 7, 8, 5, 2, 1, 9, 5, 4
let answer = solve(array)
print(answer) // 1, 2, 3, 4, 5, 5, 7, 8, 9
indexを見る必要があって汚くなってしまった