golang归并排序

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


func mergeSort(arr []int, start, end int) {
    if start >= end {
        return
    }
    mid:=(start + end) / 2
    mergeSort(arr, start, mid)
    mergeSort(arr, mid+1, end)
    merge(arr, start, mid, end)
}

func merge(arr []int, start, mid, end int) {
    var tmparr = []int{}
    var s1, s2 = start, mid+1
    for s1<= mid && s2<= end{
        if arr[s1] > arr[s2] {
            tmparr = append(tmparr, arr[s2])
            s2++
        } else {
            tmparr = append(tmparr, arr[s1])
            s1++
        }
    }
    if s1<=mid {
        tmparr = append(tmparr, arr[s1: mid+1]...)
    }
    if s2<=end {
        tmparr = append(tmparr, arr[s2: end+1]...)
    }
    for pos,item:=range tmparr{
        arr[start + pos] = item
    }
}


var a=[]int{3,4,0,1,5,6,7,8}

func main() {
    mergeSort(a, 0, len(a) - 1)
    fmt.Println(a)
}

知识点是go slice区间:

slice[i:j]表示以i ,到j索引结束, 截取原数组或者切片,创建而成的新切片,新切片的值包含原切片的i索引,但是不包含j索引。左闭右开。


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

本文来自:简书

感谢作者:17701086291

查看原文:golang归并排序

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

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