Algorithms - Merging Sort
2024-08-20 16:39:33
印象
图1 使用合并排序为一列数字进行排序的过程
思想
归并排序是典型的分治算法,它不断地将某个数组分为两个部分,分别对左子数组与右子数组进行排序,然后将两个数组合并为新的有序数组。
分析
- 稳定: 是
- 时间复杂度:
- 最优时间: O(nlog(n))
- 最坏时间: O(nlog(n))
- 平均时间: O(nlog(n))
实例代码
C#
public static List<int> sort(List<int> lst) {
if (lst.Count <= 1)
return lst;
int mid = lst.Count / 2;
List<int> left = new List<int>(); // 定义左侧List
List<int> right = new List<int>(); // 定义右侧List
// 以下兩個循環把 lst 分為左右兩個 List
for (int i = 0; i < mid; i++)
left.Add(lst[i]);
for (int j = mid; j < lst.Count; j++)
right.Add(lst[j]);
left = sort(left);
right = sort(right);
return merge(left, right);
}
/// <summary>
/// 合併兩個已經排好序的List
/// </summary>
/// <param name="left">左側List</param>
/// <param name="right">右側List</param>
/// <returns></returns>
static List<int> merge(List<int> left, List<int> right) {
List<int> temp = new List<int>();
while (left.Count > 0 && right.Count > 0) {
if (left[0] <= right[0]) {
temp.Add(left[0]);
left.RemoveAt(0);
} else {
temp.Add(right[0]);
right.RemoveAt(0);
}
}
if (left.Count > 0) {
for (int i = 0; i < left.Count; i++)
temp.Add(left[i]);
}
if (right.Count > 0) {
for (int i = 0; i < right.Count; i++)
temp.Add(right[i]);
}
return temp;
}
推荐
参考
最新文章
- xcode调整debug,release模式
- HTML中strong与b,em与i标签的区别
- 使用maven创建Archetype
- iOS开发零基础--Swift篇:逻辑分支
- PHPCMS列表页伪静态
- Hadoop学习1--解决启动过程中的问题
- 【开源项目5】测滑菜单MenuDrawer的使用以及解析
- amazon RequestReport
- 流式计算-Jstorm提交Topology过程(上)
- KMP该算法解释(最长公共子)
- js 向form表单中插入数据
- ubuntu18.04新体验
- STL 小白学习(8) set 二叉树
- 30天代码day1Data Types
- 嵌入式linux——汇编、C语言基础(一)
- 科技论文之Latex公式&;amp;符号
- media属性
- Winform 开发基础分层框架
- maven-插件-不同的开发环境指定
- SpeechLib 应用