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#数据绑定之删除datatable数据示例

    c#数据绑定之删除datatable数据示例 当我们使用c#编写程序时,有时需要对DataTable进行删除某些数据的操作,并且我们也需要确保在删除数据后页面及时刷新,使删除操作得到体现。下面,我们将详细讲解如何在c#中进行数据绑定和删除操作的完整攻略。 数据绑定操作 首先,在c#中进行数据绑定操作需要实现将数据源(如DataTable)绑定到控件,这样就可…

    C# 2023年6月1日
    00
  • C# Quartzs定时器的使用教程

    C# Quartz定时器的使用教程 什么是Quartz定时器? Quartz是一个强大的开源企业级调度框架,主要用于执行任务、计划任务、调度和定时任务等等。C# Quartz定时器是基于Quartz开源调度框架在C#环境下进行开发、应用的框架,可以更容易地实现任务调度和自动化任务执行等功能。 C# Quartz定时器的主要特点包括: 支持多种任务调度模式 灵…

    C# 2023年6月1日
    00
  • c#不使用系统api实现可以指定区域屏幕截屏功能

    C#不使用系统API实现可以指定区域屏幕截屏功能攻略 在C#中,可以通过一些内置的或者第三方的类库来实现屏幕截屏功能。但是,有时候需要对特定区域进行截屏,本文将介绍如何使用C#实现指定区域屏幕截屏的功能,且不使用系统API,具体步骤如下: 步骤1:创建一个winform窗体应用 将以下代码添加到Main方法中: [STAThread] static void…

    C# 2023年6月8日
    00
  • 深入浅出掌握Unity ShaderLab语法基础

    请听我详细讲解“深入浅出掌握Unity ShaderLab语法基础”的完整攻略。 一、ShaderLab语法基础概述 ShaderLab是Unity中用于编写着色器的语言,它基于CG语言编写,同时又封装了一些常用的函数和数据结构,使得着色器开发变得容易而高效。在使用ShaderLab编写着色器时,需要定义一个合法的Shader程序,并且指定使用哪种渲染方式。…

    C# 2023年6月3日
    00
  • 详解将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    详解将ASP.NET Core应用程序部署至生产环境中(CentOS7) 在本攻略中,我们将深入讲解如何将ASP.NET Core应用程序部署至生产环境中的CentOS7服务器,并提供两个示例说明。 准备工作 在开始部署ASP.NET Core应用程序之前,您需要完成以下准备工作: 在CentOS7服务器上安装.NET Core运行时环境。 sudo rpm…

    C# 2023年5月17日
    00
  • C#操作注册表的方法详解

    C#操作注册表的方法详解 什么是注册表 注册表是Windows操作系统中的一个重要组成部分,用于存储系统和应用程序的各种配置信息,包括系统硬件、软件和用户设置等。其中,注册表是由一些键(key)和值(value)组成的,它们类似于树形结构的路径和对应的数据,我们可以通过访问这些键和值来获取和修改系统和应用程序的设置信息。 C#操作注册表的方法 在C#中,我们…

    C# 2023年5月15日
    00
  • C# String.IndexOf()方法: 搜索指定的字符串并返回它的第一个匹配项的索引

    String.IndexOf()方法用于返回字符串中第一次出现指定字符或子字符串的位置,如果没有找到则返回-1。以下是该方法的具体参数和使用方法。 参数 String.IndexOf()方法接受一个字符串类型的参数,表示要在当前字符串中查找的目标字符或子字符串,也可以接受一个可选的整数类型的参数start,表示查找的起始位置,默认为 0。 语法 public…

    C# 2023年4月19日
    00
  • C# 如何合并和拆分PDF文件

    针对这个问题,我可以给你提供以下完整攻略: 前置要求 在进行C#合并和拆分PDF文件之前,我们需要先安装iTextSharp这个C# PDF处理库。你可以使用NuGet下载并安装iTextSharp,或者直接在Visual Studio中通过“引用”菜单添加对应的dll文件。 合并PDF文件 如果需要合并多个PDF文件,可以采取如下步骤进行处理: 第一步:新…

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