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"]))