🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
排序算法是一种将一组数据按照特定的规则进行排列的方法。排序算法通常用于对数据的处理,使得数据能够更容易地被查找、比较和分析。
下面是常见的11种排序算法:
归并排序是一种分治算法,基本思想是将待排序的序列分成若干个子序列,每个子序列都是有序的,然后将这些有序的子序列合并成一个大的有序序列,直到整个序列有序为止。
具体步骤如下:
在进行合并时,可以使用两个指针分别指向两个有序子序列的首元素,比较两个指针所指元素的大小,将较小的元素插入到合并后的序列中,同时移动指向这个元素的指针。重复这个过程直到两个子序列都被遍历完,然后将剩余的元素直接插入到合并后的序列的末尾即可。
时间复杂度为 O(nlogn),是一种稳定的排序算法。
归并排序的时间复杂度为O(nlogn),其中n为待排序数组的长度。
归并排序的主要步骤是将待排序数组不断地分成两个子数组,直到每个子数组只有一个元素,然后再将相邻的子数组合并成一个有序的数组。这个过程可以看成是一棵二叉树的结构,每一层的时间复杂度都是O(n),而树的高度是logn,因此总的时间复杂度为O(nlogn)。
归并排序的空间复杂度也为O(n),因为需要开辟一个与原数组长度相同的额外空间用于存储归并后的有序数组。
归并排序的应用场景包括但不限于以下几种:
归并排序是一种高效且灵活的排序算法,在多种应用场景中均有广泛的应用。
/// <summary>
/// 归并排序
/// </summary>
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++];
}
}
}