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日

相关文章

  • 基于WPF编写一个串口转UDP工具

    下面是详细的攻略: 1. 准备工作 首先你需要准备一台装有.NET Framework和WPF开发工具的计算机。然后安装System.IO.Ports和System.Net.Sockets命名空间。 2. 创建WPF应用程序 使用Visual Studio打开一个新的WPF应用程序。然后在MainWindow.xaml中创建一个界面布局,包含按钮、输入框、输…

    C# 2023年6月6日
    00
  • C#实现图形界面的时钟

    下面就来详细讲解一下怎么用C#实现图形界面的时钟。 1. 准备工作 首先,我们需要安装Visual Studio。可以去官网下载安装,根据自己的需求选择不同版本。 2. 创建项目 打开Visual Studio,点击“新建项目” -> “Windows桌面” -> “Windows窗体应用程序”,命名为“Clock”。 3. 添加控件 我们需要添…

    C# 2023年6月1日
    00
  • Unity调用C++ dll实现打开双目相机

    Unity调用C++ dll实现打开双目相机需要以下几个步骤: 编写C++ dll文件 首先,我们需要编写C++ dll文件。C++ dll文件的作用是实现打开双目相机的操作,并将相机返回给Unity。在C++文件中需要定义一个函数来获取左右相机数据,并返回给C#脚本。以下是C++ dll文件的示例: #include<iostream> #in…

    C# 2023年6月7日
    00
  • C#实现简单飞行棋小游戏

    首先来讲一下“C#实现简单飞行棋小游戏”的完整攻略。 简介 飞行棋,是一种以飞行为主题的棋类游戏,是一种常见的亲子游戏。游戏规则简单、易于上手,非常适合大众化的群体。 游戏规则 游戏地图共有 100 个格子,分别标记着不同的内容,如酒驾、炸弹、地雷、停机坪、幸福、喜事等等。同时,每个玩家有 4 个棋子,起点和终点不同,各自从起点进入,经过终点,返回起点,先完…

    C# 2023年6月7日
    00
  • .Net创建型设计模式之抽象工厂模式(Abstract Factory)

    我来为你详细讲解一下“.NET创建型设计模式之抽象工厂模式(Abstract Factory)”的完整攻略。 什么是抽象工厂模式? 抽象工厂模式是一种对象创建型设计模式,它提供了一种方式来创建一系列相关或互相依赖的对象,而不需要指定实际被创建的具体对象。它通过定义一系列工厂方法来创建相关或依赖对象的家族,而不需要指定实际被创建的具体对象。 抽象工厂模式的实现…

    C# 2023年5月31日
    00
  • 解析C#编程的通用结构和程序书写格式规范

    解析C#编程的通用结构和程序书写格式规范 通用结构 C#程序通常包括以下部分: using System; // 引用命名空间 public class MyClass // 定义类 { static void Main() // 主方法 { // 代码块 } } using语句引用需要使用的命名空间。 public class定义一个公共的类。 Main方…

    C# 2023年5月15日
    00
  • javascript function(函数类型)使用与注意事项小结

    下面我将详细讲解JavaScript函数类型的使用和注意事项小结。 函数类型概述 JavaScript中的函数是一种特殊的对象。它们可以像普通变量一样被传递、赋值、作为参数或返回值。 函数有两种基础类型: 函数声明 函数表达式 函数声明是指使用function关键字声明的函数,声明的语法如下: function functionName(arg1, arg2…

    C# 2023年6月8日
    00
  • ASP.NET MVC扩展带验证的单选按钮

    以下是“ASP.NET MVC扩展带验证的单选按钮”的完整攻略: 什么是ASP.NET MVC扩展带验证的单选按钮 ASP.NET MVC扩展带验证单按钮是种机制,允许开发人员在MVC应用程序中使用自定义HTML助手扩展单选按钮,并添加验证规则种机制可以助开发人员更轻松地处理单选按钮,并提高用户体验。 ASP.NET MVC扩展带验证的单选按钮步骤 ASP.…

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