归并排序
2013-12-20 17:32
239 查看
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
[b]算法描述[/b]
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
[b]代码描述[/b]
[b]算法描述[/b]
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
[b]代码描述[/b]
List<int> Sort(List<int> lst) { int count = lst.Count; if (count == 1) return lst; int mid = count / 2; List<int> left = new List<int>(); List<int> right = new List<int>(); for (int i = 0; i < mid; i++) { left.Add(lst[i]); } for (int i = mid; i < lst.Count; i++) { right.Add(lst[i]); } left = Sort(left); right = Sort(right); return Merge(left, right); } List<int> Merge(List<int> left, List<int> right) { List<int> lst = new List<int>(); while (left.Count > 0 && right.Count > 0) { if (left[0] < right[0]) { lst.Add(left[0]); left.RemoveAt(0); } else { lst.Add(right[0]); right.RemoveAt(0); } } if (left.Count > 0) { lst.AddRange(left); } else if (right.Count > 0) { lst.AddRange(right); } return lst; }
相关文章推荐
- 微派(V-TOP)第五届企业微信营销培训取得圆满成功
- Android中各级目录的作用说明
- 18B20温度传感器详解
- 把DSP TMS320F28XXX的程序段从flash复制到ram中运行
- 静态修饰
- (转)JPEG图片数据结构分析- 附Png数据格式详解.doc
- 手把手教你cuda5.5与VS2010的编译环境搭建
- Android如何设置标题栏的高度
- Aoj 418 ACM 排名
- 黑马程序员:正则表达式
- java dom4j解析xml用到的几个方法
- mybatis教程
- 通过表名获得列名信息,返回json串
- API Guide--UI Interface--Styles and Themes
- C++闭包: Lambda Functions in C++11
- C++闭包: Lambda Functions in C++11
- awg线规,直径,面积,电流对照
- SOCKET通过代理连接服务器
- 不重启vim就让vimrc文件生效
- ORACLE 11G EXPDP交互模式 interactive mode