Windows10環境で、Swift3.0 による QuickSort の関数をジェネリクスで作成

Windows10,64ビット環境で
「IBM Swift Sandbox」で Swift 3.0 のプログラムの学習ができる。
他の環境でもできるかどうかは、未調査。

「IBM Swift Sandbox」 をクリックすると
下記画面にジャンプします。
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"]

と表示されます。

ibmSwiftSandbox_QuickSort

上記画面には、
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"]))

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です