排序算法之归并排序(分治法排序)
来源:互联网 发布:python pip安装windows 编辑:程序博客网 时间:2024/04/28 16:23
算法思想:将一个数列划分为较小的部分,并使每一部分有序,然后将这些较小的有序部分合并。
下面实现,二路归并排序。
C#实现:
/// <summary> /// 二路归并排序(分治法排序) /// </summary> /// <param name="soure">源数组</param> /// <param name="begin">数组的起始元素下标0</param> /// <param name="end">数组的最后一个元素的下标source.Length-1</param> private void merge_sort(int[] soure,int begin,int end) { if (begin < end) //递归终止条件 { int middle = (begin + end)/2; //计算中间位置 merge_sort(soure, begin, middle); //对左半部分递归排序 merge_sort(soure, middle + 1, end); //对右半部分递归排序 merge(soure, begin, middle, end); //合并左右两部分的排序结果 } } /// <summary> /// 对两个有序序列进行合并 /// </summary> /// <param name="soure">源数组</param> /// <param name="begin">起始位置</param> /// <param name="middle">中间位置</param> /// <param name="end">终止位置</param> private void merge(int[] soure,int begin,int middle,int end) { int n1 = middle - begin + 1; //左半部分元素个数 int n2 = end - middle; //右半部分元素个数 int[] left = new int[n1+1]; //存放左半部分元素,最后一个元素为哨兵位,标识左半部分结束 int[] right = new int[n2+1]; //存放右半部分元素 int i = 0, j = 0; for (i = 0; i < n1;i++ ) { left[i] = soure[begin + i]; } left[left.Length - 1] = int.MaxValue; //哨兵位赋值 for (j =0; j < n2;j++ ) { right[j] = soure[middle + 1 + j]; } right[right.Length - 1] = int.MaxValue; i = 0; j = 0; for(int k=begin;k<=end;k++) //合并左右两部分到源数组 { if(left[i]<=right[j]) { soure[k] = left[i]; if(left[i]!=int.MaxValue) i++; } else { soure[k] = right[j]; if(right[j]!=int.MaxValue) j++; } } }
- 排序算法之归并排序(分治法排序)
- 分治算法之归并排序
- 分治算法之归并排序
- 分治算法之归并排序
- 分治法之归并排序算法
- 【算法】分治法之归并排序实现
- 算法储备之归并排序(分治法)
- 归并排序(分治算法)
- 【算法】分治法(快速排序,归并排序)
- 分治法 归并排序(递归算法)
- 分治算法--归并排序
- 分治算法-归并排序
- 分治算法-归并排序
- 算法--分治归并排序
- 归并排序-分治算法
- 分治算法---归并排序
- 分治法之归并排序
- 分治法之归并排序
- 几种比较好用的.htaccess配置
- js中this关键字的使用
- hdu 1370 中国余数(剩余定理)
- 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。
- java IO详解(二)
- 排序算法之归并排序(分治法排序)
- BAPI_SALESORDER_CHANGE a sample of bapi which reject sales orders
- IIR与FIR基础知识
- VxWorks中WindML3.0的配置
- Poco 单元测试工具使用 for windows
- Ubuntu_11.40_server修改mysql的root用户密码
- AOP技术基础
- C Extending or ctypes in pyinotify
- wince6.0添加外部字体库