C#でマージソートを実装する

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));
        }

おすすめ

転載: blog.csdn.net/u012177821/article/details/130985716