选择排序:
一个一个比较,将最小或最大的数据依次归位
package main
import (
"log"
)
func main() {
arr := []int{10, 2, 0, -9, 2, 100, -22, 54, 23, 7}
log.Println(arr)
selectionSort(arr)
log.Println(arr)
}
func selectionSort(arr []int) {
if arr == nil || len(arr) < 2 {
return
}
for i := 0; i < len(arr)-1; i++ {
minIndex := i
for j := i + 1; j < len(arr); j++ {
if arr[j] < arr[minIndex] {
minIndex = j
}
}
swap(arr, i, minIndex)
}
}
func swap(arr []int, i, j int) {
tmp := arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
冒泡排序:
在比较的同时进行交换移动(冒泡)
package main
import "log"
func main() {
arr := []int{10, 2, 0, -9, 2, 100, -22, 54, 23, 7}
log.Println(arr)
BubbleSort(arr)
log.Println(arr)
}
func BubbleSort(arr []int) {
if arr == nil || len(arr) < 2 {
return
}
for i := len(arr) - 1; i > 0; i-- {
for j := 0; j < i; j++ {
if arr[j] > arr[j+1] {
swap(arr, j)
}
}
}
}
func swap(arr []int, j int) {
tmp := arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
}
插入排序
先以两个为一组,依次增加,一次加一个数进来,每次保证正序
package main
import "log"
func main() {
arr := []int{10, 2, 0, -9, 2, 100, -22, 54, 23, 7}
log.Println(arr)
InsertionSort(arr)
log.Println(arr)
}
func InsertionSort(arr []int) {
if arr == nil || len(arr) < 2 {
return
}
for i := 1; i < len(arr); i++ {
for j := i; j > 0; j-- {
if arr[j] < arr[j-1] {
swap(arr, j)
}
}
}
}
func swap(arr []int, j int) {
tmp := arr[j]
arr[j] = arr[j-1]
arr[j-1] = tmp
}
时间复杂度都为O(N^2)
插入排序常数时间最好