用go手写几种数组排序,顺便复习一下哈!
1、冒泡排序(时间复杂度O(n2))
func BubbleSort(values []int) []int {
for i := 0; i < len(values)-1; i++ {
for j := 0; j < len(values)-i-1; j++ {
if values[j] > values[j+1] {
values[j], values[j+1] = values[j+1], values[j]
}
}
}
return values
}
2、选择排序(时间复杂度O(n2))
func SelectSort(values []int) []int {
for i := 0; i < len(values)-1; i++ {
min := i
for j := i + 1; j < len(values); j++ {
if values[j] < values[min] {
min = j
}
}
if min != i {
values[min], values[i] = values[i], values[min]
}
}
return values
}
3、插入排序(时间复杂度O(n2))
func InsertSort(values []int) []int {
for i := 1; i < len(values); i++ {
for j := i; j > 0; j-- {
if values[j] < values[j-1] {
values[j], values[j-1] = values[j-1], values[j]
}
}
}
return values
}
4、快速排序(时间复杂度O(nlogn))
func QuickSort(values []int) []int {
if len(values) < 2 {
return values
}
head, tail := 0, len(values)-1
tag := values[0]
for i := 1; i <= tail; {
if values[i] > tag {
values[i], values[tail] = values[tail], values[i]
tail--
} else {
values[i], values[head] = values[head], values[i]
head++
i++
}
}
QuickSort(values[:head])
QuickSort(values[head+1:])
return values
}