golang のクイックソートの仕組みを教えてください。

Go言語でクイックソートを実装する方法は次のとおりです。

package main

import "fmt"

func main() {
    arr := []int{5, 9, 3, 1, 7, 6}

    quickSort(arr, 0, len(arr)-1)

    fmt.Println(arr)
}

func quickSort(arr []int, low, high int) {
    if low < high {
        pivot := partition(arr, low, high)

        quickSort(arr, low, pivot-1)
        quickSort(arr, pivot+1, high)
    }
}

func partition(arr []int, low, high int) int {
    pivot := arr[high]
    i := low - 1

    for j := low; j < high; j++ {
        if arr[j] < pivot {
            i++
            arr[i], arr[j] = arr[j], arr[i]
        }
    }

    arr[i+1], arr[high] = arr[high], arr[i+1]

    return i + 1
}

単純なクイックソートの実装です。まず、配列を再帰的にソートする quickSort 関数を定義します。quickSort 関数では、まず partition 関数で基準値(ここでは配列の最後の要素を選択)を見つけ、次に基準値より小さい要素を基準値の左に、基準値より大きい要素を基準値の右に配置します。その後、再帰的に quickSort 関数を呼び出して、左右の 2 つのサブ配列をソートします。最終的に、配列は昇順にソートされます。

基準値で配列を2つに分割するパーティション関数。iとjの2つのポインタを使い、配列の最初と最後を指す。配列を走査し、現在の要素が基準値より小さい場合、iポインタが指す要素と入れ替えて、iポインタを後ろに移動する。走査が終わったら、基準値をi+1ポインタが指す要素と入れ替え、基準値を正しい位置に置き、基準値のインデックスを返す。

上記のコードを実行すると、[1, 3, 5, 6, 7, 9]という結果が表示され、配列が昇順に並べ替えられていることを示しています。

bannerAds