码迷,mamicode.com
首页 > 编程语言 > 详细

go 排序算法

时间:2020-11-18 12:36:32      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:大于等于   一个   算法   数组   fun   处理   func   插入   位置   

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)
}

go 排序算法

标签:大于等于   一个   算法   数组   fun   处理   func   插入   位置   

原文地址:https://blog.51cto.com/qingfeng00/2549820

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!