c#归并排序
来源:互联网 发布:直男癌 知乎 编辑:程序博客网 时间:2024/04/30 22:58
1.需求:将一个数组通过归并排序排成有序数组
2.思想:归并排序是分治法的一个典型应用,将两个有序的序列合并成一个有序的序列称为归并,归并排序,通过将数组分成若干个有序的序列,当拆分成只有一个数时认为是有序的,然后将这些序列归并。这里需要用到递归。
3.实现:
public class MSort
{
/// <summary>
/// 待排序数组
/// </summary>
public int[] arr { get; set; }
/// <summary>
/// 归并排序
/// </summary>
/// <param name="left">指向需归并操作数组的左边界</param>
/// <param name="right">指向需归并操作数组的右边界</param>
public void MergeSort(int left,int right)
{
if (left < right)
{
int mid = (left + right) / 2;
MergeSort(left, mid);
MergeSort(mid + 1, right);
Merge(left,mid,right);
}
}
public void Merge(int left,int mid,int right)
{
int[] temparr = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= right)
{
if (arr[i] < arr[j])
{
temparr[k] = arr[i];
i++;
}
else
{
temparr[k] = arr[j];
j++;
}
k++;
}
if (i <= mid)
{
for (int m = i; m <= mid; m++,k++)
temparr[k] = arr[m];
}
if (j <= right)
{
for (int m = j; m <= right; m++, k++)
temparr[k] = arr[m];
}
for (int n = 0; n < temparr.Length; n++)
{
arr[left + n] = temparr[n];
}
}
}
4.测试代码:
MSort m = new MSort();
m.arr = new int[] { 43, 32, 212, 33, 56, 43, 68, 32, 46, 78, 6 };
m.MergeSort(0, m.arr.Length - 1);
for (int i = 0; i < m.arr.Length - 1; i++)
{
Console.Write(m.arr[i] + " ");
}
Console.Write("\n");
5.运行结果:
6.总结:归并排序为时间复杂度O(nlogn)
- C#版归并排序
- C# 归并排序
- c#归并排序
- C#归并排序
- C#实现归并排序
- C# 归并排序
- C#实现归并排序
- C# 两路归并排序
- 归并排序的C#实现
- C#中实现两路归并排序
- 归并排序算法MergeSort in C#
- C#下的归并排序算法实现
- 归并排序算法(C#实现)
- 归并排序——C#实现
- 归并排序-归并排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 归并和归并排序
- 归并与归并排序
- uboot 烧写 内核 文件系统
- Android 编程下流量监测的实现原理
- ngx_alloc.c函数分析
- 奇怪的比赛
- HDU 1036 Average is not Fast Enough!
- c#归并排序
- Windows 7上使用Grub4DOS
- android rom移植知识普及
- 普通java虚拟机和dalvik在gc上的异同
- MFC中edit控件的使用
- Centos 查看系统硬件信息
- ubuntu_vi基本
- C++多态性:虚函数的调用原理
- linux _eclipse_ffmpeg 应用