首页 > 试题广场 >

归并排序

[编程题]归并排序
  • 热度指数:2587 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
请编程实现一个整型数组的归并排序。本题会人工判断,请严格按照题目描述完成

输入描述:
一个无序的整型数组,输入格式见输入样例


输出描述:
一个有序的整型数组,输出格式见输出样例
示例1

输入

[3, 1, 4, 5, 17, 2, 12]

输出

[1, 2, 3, 4, 5, 12, 17]
package main

import (
    "bufio"
    "encoding/json"
    "fmt"
    "os"
    "strconv"
)
func main() {
    var input []int
    reader := bufio.NewReader(os.Stdin)
    s, err := reader.ReadString('\n')
    if err != nil {
        fmt.Println("err:", err)
    }
    err = json.Unmarshal([]byte(s), &input)
    if err != nil {
        fmt.Println("err:", err)
    }
    sort(input, 0, len(input))
    res := "["
    for i, v := range input {
        res += strconv.Itoa(v)
        if i != len(input) - 1 {
            res += ", "
        }
    }
    res += "]"
    fmt.Println(res)
}

func sort(arr []int, l, r int) {
    if l == r - 1 {
        return
    }
    mid := l + (r - l) >> 1
    sort(arr, l, mid)
    sort(arr, mid, r)
    p, q, i := l, mid, 0
    tmp := make([]int, r - l)
    for p < mid && q < r {
        if arr[p] < arr[q] {
            tmp[i] = arr[p]
            p++
        } else {
            tmp[i] = arr[q]
            q++
        }
        i++
    }
    for p < mid {
        tmp[i] = arr[p]
        i, p = i + 1, p + 1
    }
    for q < r {
        tmp[i] = arr[q]
        i, q = i + 1, q + 1
    }
    for j := l; j < r; j++ {
        arr[j] = tmp[j - l]
    }
}
发表于 2021-09-18 13:49:15 回复(0)