Windows10環境で、Swift3.0 による QuickSort の関数をジェネリクスで作成
Windows10,64ビット環境で
「IBM Swift Sandbox」で Swift 3.0 のプログラムの学習ができる。
他の環境でもできるかどうかは、未調査。
「IBM Swift Sandbox」 をクリックすると
下記画面にジャンプします。

画面下部の右向きの三角をクリックすると
画面右側に Hello world! が表示されます。
quickSort 関数は
Comparableプロトコルに適合するすべての型なら
一つの関数ですませられるように
Swiftのジェネリクスを使用しています。
func quickSort<T: Comparable>(val1: [T]) -> [T] {
if val1.isEmpty {
return val1
}
else {
let head = val1[0]
let body = val1[1..<val1.count]
let aa = quickSort(val1:body.filter({$0 < head}))
let bb = quickSort(val1:body.filter({$0 >= head}))
return aa + [head] + bb
}
}
print(quickSort(val1:[3,1,7,9,4,2,8]))
print(quickSort(val1:["goat","arm","toe","dog","bat"]))
画面下部の三角をクリックすると、画面右側に
[1, 2, 3, 4, 7, 8, 9] ["arm", "bat", "dog", "goat", "toe"]
と表示されます。

上記画面には、
Swiftのジェネリクスを使用した、
2つの要素の内、大きい方を取り出す bigger 関数も載せています。
func bigger<T: Comparable>(val1: T, val2: T) -> T {
return val1 > val2 ? val1 : val2
}
print(bigger(val1:10, val2:20))
print(bigger(val1:"aa", val2:"bb"))
画面下部に「Load Code」をクリックすると、
幾つかのサンプルプログラムのリストが表示されます。
その中に、quickSort があります。
func quickSort<T: Comparable>(_ array: [T]) -> [T] {
if array.isEmpty {
return array
} else {
let head = array[0]
let body = array[1..<array.count]
let left = quickSort(body.filter({$0 < head}))
let right = quickSort(body.filter({$0 >= head}))
return left + [head] + right
}
}
print(quickSort([3, 1, 7, 9, 4, 2, 8]))
print(quickSort(["goat", "arm", "toe", "dog", "bat"]))
