首页 > 编程语言 > 详细

归并排序

时间:2015-12-02 14:43:02      阅读:277      评论:0      收藏:0      [点我收藏+]

归并排序,就是利用递归先把待排序的序列分成各个子序列,知道每个自序列只有一个元素,然后在从底向上对各个子序列开始排序并merge,

就类似一颗二叉树,从2个只有一个元素的子序列排序并合并成一个有2个元素的序列,然后是排序病合并成4个元素的序列,然后是八个元素的序列。。。。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace ConsoleApplication4
{
    class Program
{
        static void Main(string[] args)
{
            int len=20;
            int[] array = new int[len];
            Random r = new Random();
            for (int i = 0; i < len; i++)
{
array[i] = r.Next(0, len);
}
            foreach(int j in array)
{
                Console.Write(j+ " ");
}
            Console.WriteLine("");
            MergeSort m = new MergeSort();
m.Sort(array, 0, len - 1);
            foreach (int j in array)
{
                Console.Write(j + " ");
}
            Console.WriteLine("");
}
 
        public class MergeSort
{
            //通过递归吧带排序的序列分成小的自序列,知道最后,然后在从底向上一层层merge排序。
            public void Merge(int[] array, int low, int mid, int highIndex)
{
                int lowIndex = low;
                int arrayLen = highIndex - lowIndex + 1;
                int[] tempArray = new int[arrayLen];
                int highBeginIndex = mid + 1;
                int tempArrayIndex = 0;
                while (lowIndex <= mid && highBeginIndex <= highIndex)
{
                    if (array[lowIndex] < array[highBeginIndex])
{
tempArray[tempArrayIndex++] = array[lowIndex++];
}
                    else
{
tempArray[tempArrayIndex++] = array[highBeginIndex++];
}
}
                while (lowIndex <= mid)
{
tempArray[tempArrayIndex++] = array[lowIndex++];
}
                while (highBeginIndex <= highIndex)
{
tempArray[tempArrayIndex++] = array[highBeginIndex];
highBeginIndex++;
}
                for (int j = low, index = 0; j <= highIndex; j++, index++)
{
array[j] = tempArray[index];
}
}
            public void Sort(int[] array, int lowIndex, int highIndex)
{
                int diff = (highIndex - lowIndex) / 2;
                int mid = diff + lowIndex;
                if (lowIndex < mid)
{
Sort(array, lowIndex, mid);
Sort(array, mid + 1, highIndex);
}
Merge(array, lowIndex, mid, highIndex);
}
}

}
}


归并排序

原文:http://fyifei0558.blog.51cto.com/7249113/1718823

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!