用C#实现归并排序

本文展示了如何使用C#编程语言实现归并排序算法,包括核心的排序逻辑函数Sort和递归分割函数MarGe。Sort函数通过比较和合并两个已排序的子数组来创建最终有序数组,而MarGe函数则负责将原始数组递归地分割为更小的部分直至单个元素,然后逐步合并这些元素。
摘要由CSDN通过智能技术生成

用C#实现归并排序算法

       /// <summary>
        /// 实际排序逻辑
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static int[] Sort(int[] left, int[] right)
        {
            //先声明一个新数组
            int[] num = new int[left.Length + right.Length];
            //生命左侧索引和右侧索引
            int leftIndex = 0;
            int rightIndex = 0;
            //进行循环,往数组里面添加内容
            for (int i = 0; i < num.Length; i++)
            {
                //如果左侧索引值大于左侧的数组长度,那么直接添加右侧的值即可
                if (leftIndex >= left.Length)
                {
                    num[i] = right[rightIndex];
                    rightIndex++;
                }
                //如果右侧的索引值大于右侧的数组长度,那么直接添加左侧的值即可
                else if (rightIndex >= right.Length)
                {
                    //进行添加
                    num[i] = left[leftIndex];
                    //左侧索引加一
                    leftIndex++;
                }
                //如果左侧值大于右侧的值,那么添加右侧的值
                else if (left[leftIndex] > right[rightIndex])
                {
                    //进行添加
                    num[i] = right[rightIndex];
                    //右侧索引加一
                    rightIndex++;
                }                
                else 
                {
                    num[i] = left[leftIndex];
                    leftIndex++;
                }
            }
            return num;
        }

        /// <summary>
        /// 进行分割处理
        /// </summary>
        /// <param name="array"></param>
        /// <returns></returns>
        public static int[] MarGe(int[] array)
        {
            //判断递归条件
            if (array.Length < 2) return array;
            //确定中间索引值
            int mid = array.Length / 2;
            //声明左侧数组
            int[] left = new int[mid];
            //声明右侧数组
            int[] right = new int[array.Length - mid];

            //接下来对左侧和右侧的数组进行赋值
            for (int i = 0; i < array.Length; i++)
            {
                //利用中间索引值进行赋值
                if (i < mid) left[i] = array[i];
                else right[i - mid] = array[i];
            }
            //进行递归操作
            return Sort(MarGe(left), MarGe(right));
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值