package main
import "fmt"
//遍历数组,把这个数组分为一个已经排序的空间,一个分为没排序的空间
//最好时间复杂度为o(n) 最坏为n的平方
//平均复杂度为n的平方,它是一个稳定的排序算法
func charusort (arr []int) []int {
if len(arr) <=1 {
return arr
}
for i :=1 ; i < len(arr) ; i++ {
a := arr[i]
j :=i - 1
for ; j >= 0 ; j -- {
if arr[j] > a {
arr[j+1] = arr[j]
}else{
break
}
}
}
return arr
}
//每一次遍历整个数组,然后22进行比较,知道把找到的最大的值直接给最后的位置
//它是一个稳定的排序算法
//最好时间复杂度为o(n) 最坏为n的平方,平均复杂度为n的平方
func maopaosort (arr []int) []int {
if len(arr) <=1 {
return arr
}
for i:=0 ; i < len(arr) ; i++ {
for j :=0 ; j <len(arr) - i - 1; j++{
if arr[j] > arr[j+1]{
arr[j],arr[j+1] =arr[j+1],arr[j]
}
}
}
return arr
}
func xuanzesort(arr []int) []int {
//将数组分为已排序和未排序,在未排序中找到最小值,然后放入排序中
//它不是一个稳定的排序算法
//最好时间复杂度为n的平方 最坏为n的平方,平均复杂度为n的平方
if len(arr) <=1 {
return arr
}
for i:=0 ; i < len(arr) - 1 ; i++ {
j := i
min :=i
//找到最小值
for ; j < len(arr) ; j++ {
if arr[j] < arr[min]{
min = j
}
}
arr[i],arr[min] =arr[min],arr[i]
}
return arr
}
func main() {
aa:=[]int{1,2,5,3,4}
xuanzesort(aa)
fmt.Println(aa)
}
如果有地方没有讲解明白或者是出现错误,欢迎指正,下一篇介绍基本排序的其他种类。