golang实现归并排序

使用版本: go version go1.12.1

 

/*
内存中的归并排序
*/
package main

import "fmt"
import "math/rand"

func mergesort(a []int, l int, r int) {
    if l >= r {
        return
    } else {
        mid := (l + r) / 2
        // fmt.Println("call mergesort between", l, " and ", mid)
        mergesort(a, l, mid)
        // fmt.Println("call mergesort between", mid+1, " and ", r)
        mergesort(a, mid+1, r)
        merge(a, l, mid, r)
    }
}

func merge(a []int, l int, mid int, r int) {
    temp := make([]int, 100, 120)
    copy(temp, a)
    t := l
    i, j := l, mid+1
    for {
        if i>mid || j >r {
            break
        }
        if a[i] < a[j] {
            temp[t] = a[i]
            t += 1
            i += 1
        } else {
            temp[t] = a[j]
            t += 1
            j += 1
        }
    }

    for {
        if i > mid {
            break
        }
        temp[t] = a[i]
        t += 1
        i += 1
    }

    for {
        if j > r {
            break
        }
        temp[t] = a[j]
        t += 1
        j += 1
    }

    // fmt.Println("merge result:", temp)
    for i := l; i < r; i++ {
        a[i] = temp[i]
    }

}

func main() {
    var n int
    n = 100
    a := make([]int, 100, 120)
    for i := 0; i < 100; i++ {
        a[i] = rand.Intn(100)
    }
    fmt.Println("start merge sort")
    mergesort(a, 0, n-1)
    fmt.Println("Final result:", a)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值