现在的位置: 首页 > 综合 > 正文

C#归并排序

2013年09月22日 ⁄ 综合 ⁄ 共 1611字 ⁄ 字号 评论关闭

   /// <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];
            }
        }

【上篇】
【下篇】

抱歉!评论已关闭.