二、归并排序

归并排序

归并排序本质上将一个无序元素集分割成许多包含一个元素的集,然后不断的将这些集进行合并,直到一个大的有序集生成。

归并排序的工作原理是可预测的,它的时间复杂度是O(nlgn),因为归并排序需要额外的存储空间,所有必须要有两倍于要排序数据的空间来处理数据

一下是参考《算法精解C语言描述》改写的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace algorithm20150715
{
    class Program
    {
        public static void merge(int[] array, int beg, int mid, int end)
        {
            int[] m = new int[array.Length];
            int ipos = beg;
            int jpos = mid + 1;
            int mpos = 0;
            while (ipos <= mid || jpos <= end)
            {
                if (ipos > mid)
                {
                    while (jpos <= end)
                    {
                        m[mpos] = array[jpos];
                        jpos++;
                        mpos++;
                    }
                    continue;
                }
                else if (jpos > end)
                {
                    while (ipos <= mid)
                    {
                        m[mpos] = array[ipos];
                        ipos++;
                        mpos++;
                    }
                    continue;
                }
                if (array[ipos] <= array[jpos])
                {
                    m[mpos] = array[ipos];
                    ipos++;
                    mpos++;
                }
                else
                {
                    m[mpos] = array[jpos];
                    jpos++;
                    mpos++;
                }
            }
            for (int i = beg; i <= end; i++)
            {
                array[i] = m[i - beg];
            }
        }

        public static void MegSort(int[] array, int beg, int end)
        {
            if (beg < end)
            {
                int mid = (end - beg) / 2 + beg;
                MegSort(array, beg, mid);
                MegSort(array, mid + 1, end);
                merge(array, beg, mid, end);
            }
        }
        static void Main(string[] args)
        {
            int[] array = new int[16] { 9, 2, 3, 4, 4, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0 };
            MegSort(array, 0, 15);
            foreach (int i in array)
            {
                Console.WriteLine(i);
            }
        }
    }
}

以上代码仅供记录和参考。

posted on 2015-07-15 10:46  咔咔们  阅读(181)  评论(0)    收藏  举报

导航