近年、Go 言語は、特に Web 開発やクラウド ネイティブ アプリケーションで非常に人気のあるプログラミング言語となっており、Go 言語を選択する開発者がますます増えています。中でもGo言語のソート機能は非常に強力で、さまざまなソート機能を簡単に実装できます。この記事では、Go 言語でソートを実装する方法を検討します。
1. Golang での並べ替え
Go 言語には、さまざまな並べ替えアルゴリズムを実装するための並べ替えパッケージが用意されており、並べ替えパッケージに含まれる 2 つの主要な関数を紹介します。
sort.Slice 関数は、スライス (スライス) タイプのデータを並べ替えるために使用できます。その関数プロトタイプは次のとおりです。
func Slice(slice interface{}, less func(i, j int) bool)
slice パラメータはソートが必要なスライスを表し、
less パラメータは判定関数であり、戻り値は bool 型でなければなりません。判定関数
less は、スライス内の各要素の大小関係を判定するために使用され、true が返された場合は、前の要素が後の要素よりも小さいため、入れ替える必要があることを意味します。
package main import ( "fmt" "sort" ) func main() { ints := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 4} sort.Slice(ints, func(i, j int) bool { return ints[i] < ints[j] }) fmt.Println(ints) }
func Sort(data Interface)
data パラメータは並べ替える必要があるデータを表し、このパラメータは sort.Interface インターフェイスを実装する型である必要があります。 sort.Interface インターフェイスの定義は次のとおりです。
type Interface interface { Len() int Less(i, j int) bool Swap(i, j int) }
package main import ( "fmt" "sort" ) type stringSlice []string func (s stringSlice) Len() int { return len(s) } func (s stringSlice) Less(i, j int) bool { return s[i] < s[j] } func (s stringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func main() { words := stringSlice{"foo", "bar", "baz", "qux"} sort.Sort(words) fmt.Println(words) }
package main import "fmt" func quickSort(arr []int, left, right int) { if left < right { partIndex := partition(arr, left, right) quickSort(arr, left, partIndex-1) quickSort(arr, partIndex+1, right) } } func partition(arr []int, left, right int) int { pivot := left for i:= left + 1; i <= right; i++ { if arr[i] < arr[left] { pivot++ arr[pivot], arr[i] = arr[i], arr[pivot] } } arr[left], arr[pivot] = arr[pivot], arr[left] return pivot } func main() { arr := []int{5, 0, 3, 2, 1, 6, 8, 9, 7, 4} quickSort(arr, 0, len(arr)-1) fmt.Println(arr) }
package main import "fmt" func shellSort(arr []int) []int { n := len(arr) for gap := n / 2; gap > 0; gap /= 2 { for i := gap; i < n; i++ { for j := i - gap; j >= 0 && arr[j] > arr[j+gap]; j -= gap { arr[j], arr[j+gap] = arr[j+gap], arr[j] } } } return arr } func main() { arr := []int{5, 0, 3, 2, 1, 6, 8, 9, 7, 4} fmt.Println(shellSort(arr)) }
以上がGo言語でソートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。