归并排序
Posted maopaoer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
归并排序
- 保证任意长度为N的数组排序所需时间和NlogN成正比
- 主要缺点是它所需的额外空间和N成正比
即将两个数组归并成一个更大的有序数组,可以先递归将它分成两半排序,再将结果归并起来
① 原地归并
实现归并的一种直截了当的方法是将俩个不同的有序数组归并到第3个数组中,将一个大数组排序时,我们需要进行很多次归并,因此每次归并都创建一个新数组来储存结果会带来问题,使用原地归并的方法,先将前半部分排序,再将后半部分排序,数组移动而不需要使用额外的空间
public static void main(Comparable[] a, int lo, int mid, int hi) { //将a[lo......mid] 与 a[mid+1.....hi] 归并 int i=lo, int j=mid+1; for(int k=lo; k<hi; k++) //将a[lo....hi]复制到aux[lo..hi] aux[k] = a[k]; for(int k=lo; k<hi; k++) { if(i>mid) a[k]=aux[j++]; else if(j>hi) a[k]=aux[i++]; else if(a[j]<a[i]) a[k]=a[j++]; else a[k]=aux[i++]; } }
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章