归并排序

1. 算法描述
归并排序是将两个或两个以上的有序表合并成一个新的有序表。
2. 算法代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* 归并排序
**/
func MergeSort(data []int) {
    count := len(data)
    if count <= 1 {
        return
    }
    mid := count / 2
    MergeSort(data[0:mid])
    MergeSort(data[mid:count])
    p1, p2 := 0, mid
    var newData []int
    for p1 < mid && p2 < count {
        if data[p1] <= data[p2] {
            newData = append(newData, data[p1])
            p1++
        } else {
            newData = append(newData, data[p2])
            p2++
        }
    }
    var start, end int
    if p1 < mid {
        start = p1
        end = mid
    } else {
        start = p2
        end = count
    }
    for i := start; i < end; i++ {
        newData = append(newData, data[i])
    }
    for i := 0; i < count; i++ {
        data[i] = newData[i]
    }
}

3. 时间复杂度:O(n*logn)
4. 空间复杂度:O(n)
5. 稳定性:稳定

posted @   疯一样的狼人  阅读(123)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2017-02-15 MySQL视图
2017-02-15 MySQL分区表与合并表
点击右上角即可分享
微信分享提示