C#算法设计排序篇之05-归并排序(附带动画演示程序)
归并排序(Merge Sort)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/683 访问。
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
示例:
public class Program {
public static void Main(string[] args) {
int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };
MergeSort(array, 0, array.Length - 1);
ShowSord(array);
Console.ReadKey();
}
private static void ShowSord(int[] array) {
foreach (var num in array) {
Console.Write($"{num} ");
}
Console.WriteLine();
}
public static void MergeSort(int[] array, int low, int high) {
if (low < high) {
int mid = (low + high) / 2;
MergeSort(array, low, mid);
MergeSort(array, mid + 1, high);
Merge(array, low, mid, high);
}
}
private static void Merge(int[] array, int low, int mid, int high) {
int[] mergeArr = new int[high - low + 1];
int left = low;
int right = mid + 1;
int merge = 0;
while (left <= mid && right <= high) {
if (array[left] <= array[right]) {
mergeArr[merge++] = array[left++];
}
else {
mergeArr[merge++] = array[right++];
}
}
while (left <= mid) {
mergeArr[merge++] = array[left++];
}
while (right <= high) {
mergeArr[merge++] = array[right++];
}
merge = 0;
while (low <= high) {
array[low++] = mergeArr[merge++];
}
}
}
以上是归并排序算法的一种实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/683 访问。
8 11 21 28 32 43 48 56 69 72 80 94
分析:
归并排序算法的时间复杂度不难证明为: 。
AlgorithmMan:
AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
C#算法设计排序篇之05-归并排序(附带动画演示程序)的更多相关文章
- C#算法设计排序篇之04-选择排序(附带动画演示程序)
选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...
- C#算法设计排序篇之06-堆排序(附带动画演示程序)
堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ...
- C#算法设计排序篇之09-基数排序(附带动画演示程序)
基数排序(Radix Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/691 访问. 基数排序属于" ...
- C#算法设计排序篇之08-计数排序(附带动画演示程序)
计数排序(Counting Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/689 访问. 计数排序是一个非基 ...
- C#算法设计排序篇之07-希尔排序(附带动画演示程序)
希尔排序(Shell's Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/687 访问. 希尔排序是插入排序的 ...
- C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
直接插入排序(Straight Insertion Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/679 访 ...
- C#算法设计排序篇之02-快速排序(附带动画演示程序)
快速排序(Quick Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/677 访问. 快速排序由C. A. R ...
- C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
冒泡排序(Bubble Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/672 访问. 它重复地访问要排序的元 ...
- C#算法设计排序篇之10-桶排序(附带动画演示程序)
桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ...
随机推荐
- scratch编程我的世界3D史蒂夫
这个程序我们只能制作出一个3D模型而已,并不是真正的我的世界整个游戏: 效果很炫酷吧!现在我们就来看看是怎样编程的吧! 首先,这个模型是有无数个平面克隆体摞在一起,旋转后会产生一种立体的错觉,是不是有 ...
- Shell基本语法---case语句
case语句 格式 case 变量 in 值1 ) 执行动作1 ;; 值2 ) 执行动作2 ;; 值3 ) 执行动作3 ;; .... * ) 如果变量的值都不是以上的值,则执行此程序 ;; esac ...
- 切换npm源的几种方法
我们在使用官方提供的npm源安装各种依赖包的时候,下载速度会很慢,通常需要更换npm源. 我们可以在终端中输入命令 npm config list 来查看 npm 源地址,默认地址为 metrics- ...
- 抓取Android崩溃日志
作为一个测试人员,特别是安卓的测试,由于系统版本的不同和手机本身各个品牌的优化和硬件的不同,会出现各种各样的崩溃. 记录崩溃的方式有很多种,比如使用录屏工具或文档进行记录,但是最简洁明了可以直接定位的 ...
- MySQL 删除表中所有数据
方法一:使用 delete from [表名] 生成日志 方法二:使用 truncate table [表名] 无日志生成 两种方式删除后再插入数据,第一条id的值不一样 方法一: 方法二 ...
- Centos 7下编译安装Apache
(1)下载apr.apr-util.httpd源码包 百度云下载地址:https://pan.baidu.com/s/1HyW_9XTLhhhf5j_IuNCQsQ 提取码:pg4d (2)安装编译工 ...
- Day05_企业权限管理(SSM整合)
学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...
- 性能分析(2)- 应用程序 CPU 使用率过高案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 系统架构背景 其中一台用作 Web 服务器,来模拟 ...
- Python unichr() 函数
描述 unichr() 函数 和 chr() 函数功能基本一样, 只不过是返回 unicode 的字符.高佣联盟 www.cgewang.com 注意: Python3 不支持 unichr(),改用 ...
- PHP unpack() 函数
实例 从二进制字符串对数据进行解包: <?php$data = "PHP";print_r(unpack("C*",$data));?>高佣联盟 w ...