博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并排序
阅读量:4625 次
发布时间:2019-06-09

本文共 1628 字,大约阅读时间需要 5 分钟。

MERGE(A, p, q, r),其中A是个数组,p, q和r是下标。满足p<=q<r.该过程假设子数组A[p..q]和A[q+1..r]都已排好序;

MERGE过程的时间代价为Θ(n), 其中n=r-p+1是待合并的元素个数。

伪码:

MERGE(A, p, q, r)  n1 ← q - p + 1  n2 ← r - q  create arrays L[1.. n1+1] and R[1.. n2+1]  for i ← 1 to n1    do L[i] ← A[p + i - 1]  for j ← 1 to n2    do R[j] ← A[q + j]  L[n1 + 1] ← ∞  R[n2 + 1] ← ∞  i ← 1  j ← 1  for k ← p to r    do if L[i] <= R[j]      then A[k] ← L[i]        i ← i + 1      else A[k] ← R[j]        j ← j + 1
MERGE-SORT(A, p, r)  if p < r    q ← (p + r) / 2      MERGE-SORT(A, p, q)    MERGE-SORT(A, q + 1, r)    MERGE(A, p, q, r)

Java实现

public void mergeSort(int[] a, int p, int r)    {        if (p < r)        {            int q = (p + r) / 2 ;            mergeSort(a, p, q);            mergeSort(a, q + 1, r);            merge(a, p, q, r);        }    }    private void merge(int a[], int p, int q, int r)    {        int n1 = q - p + 1;        int n2 = r - q;        int[] l_array = new int[n1 + 1];        int[] r_array = new int[n2 + 1];        for (int i = 0; i < n1; i++)        {            l_array[i] = a[p + i];        }        for (int j = 0; j < n2; j++)        {            r_array[j] = a[q + j + 1];        }        l_array[n1] = Integer.MAX_VALUE;        r_array[n2] = Integer.MAX_VALUE;        int i = 0, j = 0;        for (int k = p; k <= r; k++)        {            if (l_array[i] <= r_array[j])            {                a[k] = l_array[i];                i = i + 1;            }            else            {                a[k] = r_array[j];                j = j + 1;            }        }    }

 

 

 

转载于:https://www.cnblogs.com/zhuqiang/archive/2012/05/05/2485353.html

你可能感兴趣的文章
评论列表显示及排序,个人中心显示
查看>>
JavaWeb学习笔记总结 目录篇
查看>>
C#根据html生成PDF
查看>>
Neutron SDN 手动实现手册
查看>>
linux下core文件调试方法
查看>>
20个创意404错误页面设计的启示
查看>>
基础训练 芯片测试
查看>>
如何用命令将本地项目上传到git
查看>>
JavaScript 实现鼠标拖动元素
查看>>
js 模糊查询 (360接口)
查看>>
python+rabbitMQ实现生产者和消费者模式
查看>>
“模态”对话框和“后退”按钮
查看>>
关于javascript实现的网站页面侧边悬浮框"抖动"问题
查看>>
linux_命令格式和命令提示符
查看>>
Cocos2d-X-3.0之后的版本的环境搭建
查看>>
when case group by 的用法集合
查看>>
洛谷P1908 逆序对
查看>>
转义符
查看>>
poj 1019
查看>>
asp.net mvc上传文件
查看>>