归并排序算法
来源:互联网 发布:app运营数据报告模板 编辑:程序博客网 时间:2024/06/06 23:51
算法伪代码:
Merge-Sort(A,p,r){
//输入无序数组A[p...r],输出有序数组A[p...r]
if p < r
then q <- (p + r) / 2
Merge-Sort(A,p,q)
Merge-Sort(A,q+1,r)
Merge(A,p,q,r)
}
Merge(A,p,q,r){
n1 <- q-p+1
n2 <- r-q
create array L[1...n1+1] and R[1...n2+1]
L[1...n1] <- A[p...q]
R[1...n2] <- A[q+1...r]
L[n1+1] <- MAX_AVLUE
R[n2+1] <- MAX_VALUE
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
}
java实现:
public class TestMergeSort{public static void main(String[] args){System.out.println("Before Mergesort: ");int[] intArray = new int[100];for(int i = 0;i < 100;i++){intArray[i] = (int)(Math.random() * 100);System.out.print(intArray[i] + " ");}mergeSort(intArray,0,intArray.length - 1);System.out.println("\nAfter Mergesort: ");for(int i = 0;i < intArray.length;i++){System.out.print(intArray[i] + " ");}}public static 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);}}//合并分别已经排好序的A[p...q]和A[q+1...r]public static void merge(int[] A,int p,int q,int r){int n1 = q - p + 1;int n2 = r - q;//新建两个副本数组L、R分别用于拷贝A[p...q]和A[q+1...r]int[] L = new int[n1 + 1];int[] R = new int[n2 + 1];int i,j;for(i = 0;i < L.length - 1;i++)L[i] = A[p + i];for(j = 0;j < R.length - 1;j++)R[j] = A[q + 1 + j];//将数组L、R的最后一个值设为无穷大作为哨兵L[n1] = Integer.MAX_VALUE;R[n2] = Integer.MAX_VALUE;//从左至右分别比较数组L、R,并将较小值依次放回A[p...r]中i = 0;j = 0;for(int k = p;k <= r;k++){if(L[i] <= R[j])A[k] = L[i++];else A[k] = R[j++];}}}
时间复杂度:
合并的时间复杂度为O(n),划分的时间复杂度为O(logn),故总的时间复杂度为O(nlogn)
空间复杂度:
合并是需要n个额外的临时存储空间来保存合并序列,故空间复杂度为O(n)
稳定性:
稳定
运行结果:
阅读全文
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 认识SQL查询
- 【ES6】async/await
- 某unity3d初学者 2017.9.16
- Android进程保活招式大全
- 文章标题
- 归并排序算法
- 页面跳转的方法
- ajax数据格式分析
- android之跳转相册选择图片/照相
- Git diff 比较两个版本的差异
- 在ubuntu与win7之间建立文件共享
- 介绍界面的手势控制的代码
- 三角函数补充(反三角函数与 sec)
- selenium+python 自动化框架学习