算法设计与分析笔记——合并排序
来源:互联网 发布:网络推广产品代理 编辑:程序博客网 时间:2024/05/22 16:01
简介
合并排序算法是用分治策略实现对n个元素进行排序的算法。其 基本思想 是:将待排序元素分成大小大致相容的2个子集合,分别等于2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。
·
图解:
非递归合并排序算法
public static void mergeSort(Comparable a[], int left, int right){ Comparable []b = new Comparable[a.length]; int s = 1; while(s < a.length){ mergePass(a, b, s); // 合并到数组b s += s; mergePass(b, a, s); // 合并到数组a s += s; }}
合并排序递归算法
public static void mergeSort(Comparable a[], int left, int right){ if(left < right){//至少有两个元素 int i = (left + right) / 2; // 取中点 mergeSort(a, left, i); mergeSort(a, i + 1, right); merge(a, b, left, i, right); // 合并到数组b copy(a, b, left, right); // 复制回数组a }
辅助算法
> `public static void mergePass(Comparable []x , Comparable []y , int s){ // 合并大小为s的相邻子数组 int i = 0; while(i <= x.length - 2 * s){ merge(x, y, i, i+s-1, i+2*s-1); i = i + 2 * s; } // 剩下的元素个数少于2s if(i + s < x.length) merge(x, y, i+s-1, x.length - 1); else for(int j = i; j < x.length; j++) y[j] = x[j]; }`> `public static void merge(Comparable []c , Comparable []d , int l, int m, int r){ // 合并c[1:m]和c[m+1:r]到d[1:r] int i = 1, j = m+1, k = 1; while((i <= m) && (j <= r)) if(c[i].compareTo(c[j]) <= 0) d[k++] = c[i++]; else d[k++] = c[j++]; if(i > m) for(int q = j; q <= r; q++) d[k++] = c[q]; else for(int q = i; q <= m; q++) d[k++] = c[q]; }
阅读全文
0 0
- 算法设计与分析笔记——合并排序
- 【算法设计与分析】4、合并排序
- 算法设计与分析 合并排序的递归实现算法
- 合并排序/归并排序(递归与分治)-算法设计与分析
- 算法分析与设计实验 分治策略 两路合并排序和快速排序
- 算法分析与设计---排序
- 算法设计与分析笔记——递归与分治
- 数据结构与算法分析笔记与总结(java实现)--排序9:有序数组合并练习题
- 【算法设计】合并排序、自然合并排序与快速排序算法的Java实现
- 算法分析——分治思想之合并排序
- 算法导论学习笔记——合并排序
- 0004算法笔记——【分治法】合并排序
- 0004算法笔记——【分治法】合并排序
- 04算法笔记——【分治法】合并排序
- 算法笔记——【分治法】合并排序
- 0004算法笔记——【分治法】合并排序
- 0004算法笔记——【分治法】合并排序
- 计科《算法设计与分析》第三周作业——冒泡排序和归并排序
- C/C++
- js:jquery插件jquery.form.js options简介
- 解决android读取中文txt的乱码(自动判断文档类型并转码
- RocketMQ原理解析-broker 4.HA & master slave
- HDU -- 2121 【无定根的最小树形图】
- 算法设计与分析笔记——合并排序
- ubuntu14.04 Mysql5.6主从,使用percona保证数据一致
- Z-Stack中LED控制
- sublime 快速编码技巧
- 最全的分页查询
- 面试总结
- Why are there so many different Android kernels (technical answer please)
- 发布war文件
- CBC加密算法源码分享