1. 插入排序
// 排序函数
func sortarr(arr *[]int) *[]int {
for i := 1; i <len(*arr);i++{
maxindex := (*arr)[i] // 默认一个数为最大值
index := i -1 // index从0开始
for index >=0&&(*arr)[index] > maxindex{ // index大于等于0,如果数组中有比maxindex值大的做下面处理
(*arr)[index+1] = (*arr)[index] // 复制一个(*arr)[index]到(*arr)[index+1]占位
index-- // 移动index比对下一个
}
if index +1 != i{ // 如果 index +1不等于i时,说明最大值位置有变化,重新把最大值赋值给(*arr)[index+1]
(*arr)[index+1] = maxindex
}
}
return arr
}
func main() {
arr := []int{10,1,3,6,4,2,100,30,5,80,8,7}
a := sortarr(&arr)
fmt.Println(a)
}
2. 顺序排序
func sortarr(arr []int) []int {
for j := 0;j<len(*arr);j++{
index := j
maxindex := (*arr)[j]
for n := j+1;n <len(*arr);n++{
if (*arr)[n] > maxindex{
index = n
maxindex = (*arr)[n]
}
}
(*arr)[j],(*arr)[index] = (*arr)[index],(*arr)[j]
}
return arr
}
func main() {
arr := []int{10,1,3,6,4,2,100,30,5,80,8,7}
a := sortarr(&arr)
fmt.Println(*a)
}
3. 快速排序
func sortarr(left int,right int,arr []int) []int {
l := left
r := right
p := (*arr)[(l+r)/2]
for l < r{
for (*arr)[l] > p {
l++
}
for (*arr)[r] < p {
r--
}
if l >= r{
break
}
(*arr)[l],(*arr)[r] = (*arr)[r],(*arr)[l]
if (*arr)[l] == p{
r--
}
if (*arr)[r] == p{
l++
}
}
if l == r{
r--
l++
}
if left < r{
sortarr(left, r, arr)
}
if right > l{
sortarr(l, right, arr)
}
return arr
}
func main() {
arr := []int{10,1,3,6,4,2,100,30,5,80,8,7}
a := sortarr(0,len(arr)-1,&arr)
fmt.Println(a)
}
有疑问加站长微信联系(非本文作者)