数据结构与算法四:归并排序
来源:互联网 发布:json lib apache 编辑:程序博客网 时间:2024/06/05 16:06
一、归并排序定义
二、归并排序性质递归的将一个数组分成两半分别排序,然后将结果归并起来。
1、排序时间:对于任意长度为N的数组,自顶向下的归并排序需要1/2NlgN至NlgN次比较
2、需要额外的空间和N成正比
三、代码实现
public class MergeAlg {private static Comparable[] aux;public static boolean less(Comparable a, Comparable b){return a.compareTo(b) < 0;}public static void sort(Comparable[] a){int N = a.length;aux = new Comparable[N];sort(a,0,N-1);}/** * 自顶向下排序 */public static void sort(Comparable[] a, int lo, int hi){if(lo == hi) return;int mid = lo + (hi - lo) / 2;sort(a,lo,mid);sort(a,mid + 1,hi);merge(a, 0, mid, hi);}/** * 自下向上 */public static void sortUp(Comparable[] a){int N = a.length;aux = new Comparable[N];for(int sz = 1; sz < N; sz = sz + sz){for(int lo = 0; lo < N - sz; lo = lo + sz + sz){merge(a, lo, lo + sz - 1, Math.min(lo + sz + sz - 1, N - 1));}}}public static void merge(Comparable[] a, int lo, int mid, int hi){int i = lo, j = mid + 1;for(int t = lo; t <= hi; t++){aux[t] = a[t];}for(int t = lo; t <= hi; t++){if(i > mid) a[t] = aux[j++];else if(j > hi) a[t] = aux[i++];else if(less(aux[i], aux[j])) a[t] = aux[i++];else a[t] = aux[j++];}}}
四、核心步骤图
阅读全文
0 0
- 数据结构与算法四:归并排序
- 用Python 学习数据结构与算法 四、归并排序
- [数据结构与算法]归并排序
- 数据结构与算法-归并排序
- 数据结构与算法-----归并排序
- 【数据结构与算法】归并排序
- 【数据结构与算法】归并排序
- 【数据结构与算法之排序】归并排序
- 算法与数据结构基础(四)高级排序算法1.归并排序
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 数据结构与算法之归并排序
- 数据结构与算法之七归并排序
- python数据结构与算法 34 归并排序
- 数据结构与算法——归并排序
- 【数据结构与算法】二路归并排序
- 算法与数据结构学习 08 归并排序
- 【数据结构与算法】——归并排序
- SSM整合之异常处理
- Postgres进程之间如何协作的?
- 使用eclipse查看源码
- javaweb开发启航
- js验证身份证号
- 数据结构与算法四:归并排序
- ajax异步加载 实现局部刷新
- php利用Imagick把pdf生成png缩略图
- 高铁与普铁的感受
- 【EJB】(二)EJB的三种Bean
- 【计网】从输入 URL 到显示页面发生了什么?
- Android基础(3):图片和外观改善
- calibre recipes的API中文文档
- 引用realm包 io.realm:realm的编译不通过问题Android Studio2.0