C#归并排序

   /// <summary>
        /// 归并排序
        /// </summary>
        /// <param name="Myarray"></param>
        /// <returns></returns>
        private int[] MergerSotr(int[] Myarray)
        {
            int len=1;
            while (len < Myarray.Length)
            {
                Merge(Myarray, len);
                len *= 2;
            }

            return Myarray;
        }
        /// <summary>
        /// 归并操作
        /// </summary>
        /// <param name="Myarray"></param>
        /// <param name="len"></param>
        private void Merge(int[] Myarray, int len)
        {
            int m = 0;
            int l1 = 0;
            int h1, l2, h2;
            int j = 0;
            int i = 0;
            int[] tmp = new int[Myarray.Length];
            while (l1 + len < Myarray.Length)
            {
                l2 = l1 + len;
                h1 = l2 - 1;
                h2 = (l2 + len - 1) < Myarray.Length ? l2 + len - 1 : Myarray.Length - 1;
                j = l2;
                i = l1;

//比较两个序列的最小值并赋值给临时表,同时那个拥有最小值得序列番号自加,依次比较直至番号超出,取出最小的几个值。
                while ((i <= h1) && (j <= h2))
                {
                    if (Myarray[i] < Myarray[j])
                        tmp[m++] = Myarray[i++];
                    else
                        tmp[m++] = Myarray[j++];
                }

//如果没有排序完,继续。
                while (i <= h1)
                {
                    tmp[m++] = Myarray[i++];
                }
                while (j <= h2)
                {
                    tmp[m++] = Myarray[j++];
                }
                l1 = h2 + 1;
            }
            i = l1;
            while (i < Myarray.Length)
            {
                tmp[m++] = Myarray[i++];
            }
            for (i = 0; i < Myarray.Length; i++)
            {
                Myarray[i] = tmp[i];
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值