几种基本排序
1.快速排序
快速排序就是用递归把数组拆分成最小单元在组合起来
func FastSort(slice []int) []int {
if len(slice) <= 1 {
return slice
}
index := len(slice) / 2
value := slice[index]
slice = append(slice[:index], slice[index+1:]...)
leftSlice := []int{}
rightSlice := []int{}
for i := 0; i < len(slice); i++ {
if slice[i] < value {
leftSlice = append(leftSlice, slice[i])
} else {
rightSlice = append(rightSlice, slice[i])
}
}
s := append(append(FastSort(leftSlice), value), FastSort(rightSlice)...)
return s
}
2.选择排序
选择排序找出比当前被比较的值还小的值的索引,进行交换
func SelectSort(arr []int) []int {
//从第一个到倒数第二个
for i := 0; i < len(arr)-1; i++ {
minIndex := i
//从i+1开始和i比,直到最后一个
for j := i + 1; j < len(arr); j++ {
if arr[minIndex] > arr[j] {
minIndex = j
}
}
if minIndex != i {
arr[minIndex], arr[i] = arr[i], arr[minIndex]
}
}
return arr
}
3.冒泡排序
用第n个和n+1进行比较,进行n轮
func BubbleSort(slice []int) []int {
for i := 0; i < len(slice)-1; i++ {
for j := 0; j < len(slice)-1-i; j++ {
if slice[j+1] < slice[j] {
slice[j+1], slice[j] = slice[j], slice[j+1]
}
}
}
return slice
}
4.插入排序
用i+1个往前和i对比,只要i+1小于i,并且i>0就一直交换下去
func InsertSort(arr []int) []int {
for i := 0; i < len(arr)-1; i++ {
for j := i + 1; j > 0 && arr[j-1] > arr[j]; j-- {
arr[j-1], arr[j] = arr[j], arr[j-1]
}
}
return arr
}
5.希尔排序
希尔排序是插入排序的另一个版本,每次跨度不只是1
func ShellSort(slice []int) []int {
for i := len(slice) / 2; i > 0; i /= 2 {
for j := i; j < len(slice); j++ {
for k := j; k-i >= 0 && slice[k] < slice[k-i]; k -= i {
slice[k], slice[k-i] = slice[k-i], slice[k]
}
}
}
return slice
}

浙公网安备 33010602011771号