go 排序算法

清风hao · · 328 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:清风hao

查看原文:go 排序算法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

328 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传