C#算法之归并排序

算法释义:归并排序是一种分治算法,它采用分而治之的策略,将待排序的数组分成更小的部分,递归地对这些部分进行排序,然后将排序好的部分合并起来。它是一种比较稳定的排序算法。排序过程总结如下:

1、分解:数组拆分为若干子数组。

2、递归:对分解后的子数组进行归并排序。

3、合并:将排好序的子数组进行合并。

各位伙伴,我们熟悉了归并算法的原理,接下来看C#如何实现归并算法,代码如下:

cs 复制代码
    public static void Main()
    {
        int[] array = { 12, 11, 13, 5, 6, 7 };
        Console.WriteLine("Given Array");
        PrintArray(array);

        array = MergeSort(array, 0, array.Length - 1);
        
        Console.WriteLine("\nSorted array");
        PrintArray(array);
    }

    // 归并排序的主要函数
    public static int[] MergeSort(int[] array, int left, int right)
    {
        if (left < right)
        {
            // 找到中间索引
            int middle = (left + right) / 2;

            // 分别对左右两半进行归并排序
            MergeSort(array, left, middle);
            MergeSort(array, middle + 1, right);

            // 合并两个已排序的半部分
            Merge(array, left, middle, right);
        }
        return array;
    }

    // 合并两个子数组的函数
    public static void Merge(int[] array, int left, int middle, int right)
    {
        // 临时数组
        int[] tempArray = new int[(right - left) + 1];

        int leftIndex = left; // 左侧数组的起始索引
        int rightIndex = middle + 1; // 右侧数组的起始索引
        int tempIndex = 0; // 临时数组的索引

        // 合并过程
        while (leftIndex <= middle && rightIndex <= right)
        {
            if (array[leftIndex] <= array[rightIndex])
            {
                tempArray[tempIndex++] = array[leftIndex++];
            }
            else
            {
                tempArray[tempIndex++] = array[rightIndex++];
            }
        }

        // 复制剩余的左侧元素
        while (leftIndex <= middle)
        {
            tempArray[tempIndex++] = array[leftIndex++];
        }

        // 复制剩余的右侧元素
        while (rightIndex <= right)
        {
            tempArray[tempIndex++] = array[rightIndex++];
        }

        // 将临时数组的内容复制回原数组
        for (int i = 0; i < tempArray.Length; i++)
        {
            array[left + i] = tempArray[i];
        }
    }

    // 打印数组的函数
    public static void PrintArray(int[] array)
    {
        foreach (int item in array)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
    }
相关推荐
爱吃生蚝的于勒几秒前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~4 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
小奥超人10 分钟前
PPT文件设置了修改权限,如何取消权?
windows·经验分享·microsoft·ppt·办公技巧
lc寒曦27 分钟前
【VBA实战】用Excel制作排序算法动画
排序算法·excel·vba
王哈哈^_^29 分钟前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城31 分钟前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德1 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz1 小时前
STL--哈希
c++·算法·哈希算法
kingmax542120081 小时前
初三数学,最优解问题
算法
一直学习永不止步1 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数