1.バブルソート
FUNCバブルソート(スライス[] INT)[] INT {
I、J、さて、カウント= 0、0、trueに、LEN(スライス)
I = 0を、I <COUNT-1、Iは必要カウントアップ// {++。比較ホイール-1
真へさて=
J = 0; J <-COUNT-I 1、。Jの各++ {//の論理比較
IFスライス[J]>スライス[J + 1] {
スライス[J]、スライス[ 1 + J] =スライス[J + 1]、スライス[J]
falseにさて=
}
}
さて場合ホイール交換がない位置の比較を発生していない場合、{//、説明は完全にソートされた、ループ早期終了
BREAKを
}
}
スライスを返します
}
2.挿入ソート
InsertSort FUNC(スライス[] INT)[] {int型
VAR I、JのINTの
COUNT:= LEN(スライス)
I = 1; Iは<COUNT; I ++ {
Jため= I、J> 0; // {J、比較により、挿入位置を見つけるために、
スライス[-J 1]>スライス[J] IF {
スライス[-J 1]、スライス[J] =スライス[J]、スライス[-J 1]
}現在の要素のが{そうである//ループ終了し、挿入位置を見つける
BREAKを
}
}
}
スライスを返します
}
3.ソート
FUNC SelectSort(スライス[] INT)[] INT {
VAR I、J、minKeyがint
数:= LEN(スライス)
するため、I = 0。I <カウント-1を、私は++ {
minKey = I
jに対する= I + 1。J <数えます。J ++ {//找最小数位置
であればスライス[minKey]>スライス[J] {
minKey = J
}
}
もしminKey!= I {
スライス[minKey]、スライス[i]は=スライス[i]は、スライス[minKey]
}
}
戻りスライス
}
4.クイックソート
func QuickSort(slice []int, start, end int) {
if start >= end {
return
}
i, j := start, end
val := slice[(i+j)/2]
for i <= j {
for i <= end && slice[i] < val {
i++
}
for j >= start && slice[j] > val {
j--
}
if i <= j {
slice[i], slice[j] = slice[j], slice[i]
i++
j--
}
}
if start < j {
QuickSort(slice, start, j)
}
if end > i {
QuickSort(slice, i, end)
}
}
5. 二分查找
func BinarySearch(slice []int, head, tail, value int) int {
if head > tail {
return -1
}
middle := (head + tail) / 2
if slice[middle] == value {
return middle
} else if slice[middle] < value {
return BinarySearch(slice, middle+1, tail, value)
} else {
return BinarySearch(slice, head, middle-1, value)
}
}