归并排序
2015-12-02 13:56
176 查看
归并排序,就是利用递归先把待排序的序列分成各个子序列,知道每个自序列只有一个元素,然后在从底向上对各个子序列开始排序并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); } } } }
相关文章推荐
- LintCode: Combination Sum II
- 版本控制---关于GIT(2)
- Material Design 摘要
- Python 效率
- Java常用的设计模式14:常用设计模式之组合模式(结构型模式)
- android Studio常用快捷键
- Windows 删除共享映射
- android适配(一)
- C语言_数组与指针
- 关于Html中文乱码的问题
- 关于android.support.v7.widget.RecyclerView包导入项目引发的BUG
- Codeforces Round #334 (604B) More Cowbell [贪心]
- InnoDB Monitor
- UItableView分割线根据文本内容显示
- 问题2-:Syntax error on tokens, delete these tokens
- NuGet之控制台管理程序包
- php过滤函数
- HMM学习笔记
- 父页面打开子页面的同时传递值
- jQuery事件绑定的最佳实践