C#实现归并排序

下面是“C#实现归并排序”的完整攻略。

什么是归并排序

归并排序是一种基于“分治”思想的排序算法。该算法将待排数组递归地分成两部分,分别进行排序,最后合并成有序序列。

归并排序的步骤

  1. 拆分:将待排数组递归地拆分成左右两个子数组,直到每个子数组只有一个元素。
  2. 排序:将左右子数组分别进行排序,排序完成后合并。
  3. 合并:合并左右两个有序子数组为一个有序数组。

C#实现归并排序代码

下面是C#实现归并排序的代码:

public static void MergeSort(int[] input)
{
    if (input == null || input.Length <= 1)
    {
        return;
    }

    MergeSort(input, 0, input.Length - 1);
}

private static void MergeSort(int[] input, int start, int end)
{
    if (start >= end)
    {
        return;
    }

    int mid = start + (end - start) / 2;

    MergeSort(input, start, mid);
    MergeSort(input, mid + 1, end);

    Merge(input, start, mid, end);
}

private static void Merge(int[] input, int start, int mid, int end)
{
    int[] temp = new int[end - start + 1];
    int i = start, j = mid + 1, k = 0;

    while (i <= mid && j <= end)
    {
        if (input[i] <= input[j])
        {
            temp[k++] = input[i++];
        }
        else
        {
            temp[k++] = input[j++];
        }
    }

    while (i <= mid)
    {
        temp[k++] = input[i++];
    }

    while (j <= end)
    {
        temp[k++] = input[j++];
    }

    for (int m = 0; m < temp.Length; m++)
    {
        input[start + m] = temp[m];
    }
}

示例演示

下面给出两个示例,分别对待排数组{5, 4, 3, 2, 1}和{1, 4, 5, 3, 2}进行归并排序。

示例一:{5, 4, 3, 2, 1}

  1. 第一次拆分:{5, 4, 3, 2, 1} -> {5, 4, 3}、{2, 1}
    {5, 4, 3} -> {5}、{4, 3}
    {4, 3} -> {4}、{3}
    {2, 1} -> {2}、{1}
  2. 第一次排序:{5}、{4, 3}、{2}、{1} -> {4, 5, 3}、{1, 2}
  3. 第一次合并:{4, 5, 3}、{1, 2} -> {1, 2, 4, 5, 3}
  4. 第二次拆分:{1, 2, 4, 5, 3} -> {1, 2}、{4, 5, 3}
    {4, 5, 3} -> {4}、{5, 3}
    {5, 3} -> {5}、{3}
  5. 第二次排序:{1, 2}、{4}、{5}、{3} -> {1, 2, 4}、{3, 5}
  6. 第二次合并:{1, 2, 4}、{3, 5} -> {1, 2, 3, 4, 5}

示例二:{1, 4, 5, 3, 2}

  1. 第一次拆分:{1, 4, 5, 3, 2} -> {1, 4, 5}、{3, 2}
    {1, 4, 5} -> {1}、{4, 5}
    {4, 5} -> {4}、{5}
    {3, 2} -> {3}、{2}
  2. 第一次排序:{1}、{4}、{5}、{3}、{2} -> {1, 4}、{3, 5}、{2}
  3. 第一次合并:{1, 4}、{3, 5}、{2} -> {1, 3, 4, 5}、{2}
  4. 第二次拆分:{1, 3, 4, 5}、{2} -> {1, 3}、{4, 5}、{2}
    {4, 5} -> {4}、{5}
  5. 第二次排序:{1, 3}、{4}、{5}、{2} -> {1, 2, 3}、{4, 5}
  6. 第二次合并:{1, 2, 3}、{4, 5} -> {1, 2, 3, 4, 5}

以上就是“C#实现归并排序”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现归并排序 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#异步调用示例详解

    下面是关于“C#异步调用示例详解”的完整攻略,包含两个示例。 1. C#异步调用简介 在C#中,可以使用异步调用来执行长时间运行的操作,例如网络请求或数据库查询。异步调用可以提高应用程序的响应性能,因为它允许应用程序在等待操作完成时继续执行其他任务。 2. 使用async和await关键字进行异步调用 可以使用async和await关键字来执行异步调用。以下…

    C# 2023年5月15日
    00
  • ASP.NET中repeater嵌套实现代码(附源码)

    下面我将详细讲解“ASP.NET中repeater嵌套实现代码(附源码)”的完整攻略。 1. 什么是 Repeater Repeater 是 ASP.NET 中的一个控件,可以用于在页面上显示相同格式的数据,例如一个新闻列表、产品列表等。在 Repeater 中,我们可以使用模板定义要显示的内容和样式。 2. Repeater 嵌套 Repeater 支持嵌…

    C# 2023年5月31日
    00
  • .NET中函数Main的使用技巧

    我来为您详细讲解“.NET中函数Main的使用技巧”。 什么是函数Main 在 .NET 框架中,Main 函数是程序的入口点(EntryPoint)。当程序执行时,首先执行 Main 函数,并在该函数结束时终止程序。 Main 函数的语法 Main 函数的语法如下: static void Main(string[] args) { // 程序逻辑 } 参…

    C# 2023年6月7日
    00
  • C#调用Matlab生成的dll方法的详细说明

    下面我会详细讲解C#调用Matlab生成的dll方法的完整攻略。步骤如下: 步骤一:生成Matlab的DLL文件 在Matlab中打开需要生成DLL的.m文件,在命令行中输入命令:mbuild -setup。根据提示选择安装需要的编译器,完成后在命令行中输入命令:mbuild <filename>.m,生成对应的DLL文件。 步骤二:在C#项目中…

    C# 2023年6月7日
    00
  • .NET Core3.0 日志 logging的实现

    在.NET Core 3.0中,日志记录(logging)是一项非常重要的任务,它可以帮助您跟踪应用程序的运行情况并诊断问题。在本攻略中,我们将详细讲解.NET Core 3.0中日志记录的实现,并提供两个示例说明。 步骤一:安装NuGet包 要使用.NET Core 3.0中的日志记录功能,您需要安装以下NuGet包: Microsoft.Extensio…

    C# 2023年5月17日
    00
  • 记录.Net部署Docker-v指令使用

    记录Docker的-v指令使用 前言 之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目) dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 5031 EXPOSE 7031 FROM mcr.microsoft.c…

    C# 2023年4月22日
    00
  • FileShare枚举的使用小结(文件读写锁)

    下面是关于FileShare枚举的使用小结(文件读写锁)的完整攻略: 1. FileShare枚举概述 FileShare枚举用于指定在打开文件时是否允许其他进程对该文件的访问。例如,当一个进程尝试打开一个文件时,如果该文件被另一个进程独占打开,则会发生访问冲突。 FileShare枚举提供了一种更细粒度的文件读写锁,可以根据不同的需求指定不同的文件访问权限…

    C# 2023年5月14日
    00
  • C# 修改文件的创建、修改和访问时间的示例

    下面是在C#中修改文件的创建、修改和访问时间的示例: 修改文件创建、修改和访问时间 using System; using System.IO; class Program { static void Main() { // 指定要修改时间的文件路径 string filePath = "test.txt"; // 获取当前时间 Date…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部