排序算法---合并排序
来源:互联网 发布:ios和mac os区别 编辑:程序博客网 时间:2024/06/01 10:17
这个排序比起冒泡,选择什么的就快很多了,时间复杂度是n*logN,但是实现起来也很复杂。
原理是:第一步,合并1、2|3、4| 5、6....(相邻两个排序)
第二步,合并1、2、3、4|5、6、7、8|9...(相邻四个排序)
.
.
.
实现起来最主要的是合并的函数,废话不多说,看代码:
class MergerSorter { public bool Sort(ref int[] numbers, int arrSize) { doMergeSort(ref numbers,0,arrSize-1); return true; } private void doMergeSort(ref int[] numbers, int start,int end) { if (start < end) { int mid = (end + start) / 2; doMergeSort(ref numbers, start, mid); doMergeSort(ref numbers,mid+1,end); merge(ref numbers,start,mid,end); } } //part2_start=part1_end+1,即合并两部分的是相连的,且各自部分是已排序的。 private void merge(ref int[] numbers, int part1_start, int part1_end,int part2_end) { int tempSize=part2_end-part1_start+1; int []temp=new int[tempSize]; int pos1 = part1_start; int pos2 = part1_end + 1; int posTemp = 0; while (pos1 <= part1_end && pos2 <= part2_end) { if (numbers[pos1] < numbers[pos2]) { temp[posTemp] = numbers[pos1]; pos1++; } else { temp[posTemp] = numbers[pos2]; pos2++; } posTemp++; } //第一段没比较完 if (pos1 <= part1_end) { for (; pos1 <= part1_end; pos1++) { temp[posTemp] = numbers[pos1]; posTemp++; pos1++; } } //第二段没比较完 if (pos2 <= part2_end) { for (; pos2 <= part2_end; pos2++) { temp[posTemp] = numbers[pos2]; posTemp++; pos2++; } } //写回 for (int i = 0; i < posTemp; i++) { numbers[part1_start + i] = temp[i]; } } }
- 排序算法---合并排序
- 排序算法-合并排序
- 排序算法之合并排序
- 简单排序算法:合并排序
- 排序算法(二):合并排序
- 排序算法之合并排序
- 排序算法之合并排序
- 排序算法·合并排序
- 合并排序算法
- 合并排序算法
- 算法-----合并排序
- java 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序 算法实现
- c++合并排序算法
- 合并排序算法
- Nightmare
- 侦听Android手机ServiceState
- OnPreferenceChangeListener分析,以及与OnPreferenceClickListener的区别
- Ruby简单的读写文件
- 数据库rac11.2.0.1升级到11.2.0.2遇到的问题(三)
- 排序算法---合并排序
- 用C写有面向对象特点的程序
- CIO如何获取内部信任资源?
- 实现分析 - Enemy
- rapidxml 使用手册2
- 全面解读WM_NOTIFY
- PopupWindow点击边框以外消失的方法
- 国外程序员推荐:每个程序员都应读的书
- 向SQL2005中导入.dbf文件中的数据