go实现归并排序

2年前 (2022) 程序员胖胖胖虎阿
262 0 0
package mergeSort

func mergeSort(nums []int) []int {
    if len(nums) < 2 {
        return nums
    }
    m := len(nums) / 2
    l := mergeSort(nums[:m])
    r := mergeSort(nums[m:])
    return merge(l, r)
}

func merge(left, right []int) []int {
    i, j := 0, 0
    n, m := len(left), len(right)
    reslet := make([]int, n+m)
    for i < n && j < m {
        if left[i] <= right[j] {
            reslet[i+j] = left[i]
            i++
        } else {
            reslet[i+j] = right[j]
            j++
        }
    }
    for i < n {
        reslet[i+j] = left[i]
        i++
    }
    for j < m {
        reslet[i+j] = right[j]
        j++
    }
    return reslet
}
package mergeSort

import (
    "math/rand"
    "testing"
    "time"
)

func TestMergeSort(t *testing.T) {
    var input [100]int
    r := rand.New(rand.NewSource(time.Now().Unix()))
    // 初始化数组input[]
    for i := 0; i < 100; i++ {
        input[i] = r.Intn(1000)
    }
    output := mergeSort(input[:])
    for i := 0; i <= 10; i++ {
        println(output[i])
    }
}
版权声明:程序员胖胖胖虎阿 发表于 2022年11月24日 上午6:32。
转载请注明:go实现归并排序 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...