您的位置:首页 > 其它

归并排序

2016-04-03 15:40 190 查看

基本思想

归并排序是建立在归并操作上的一种有效的排序算法。

该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。

通过归并子列表元素来合并子列表就是归并排序(Merge Sort)

代码实现

package com.csdhsm.sort;

public class MergeSort {

public void sort(int[] arr,int low,int high){

int mid = (low + high)/2;
if(low < high){

sort(arr,low,mid);
sort(arr,mid+1,high);
mergeSort(arr,low,mid,high);
}
}

private void mergeSort(int[] arr,int low,int mid,int high){

/**
* 用于存放归并好的数组
*/
int[] copyArr = new int[high - low + 1];

int i = low;
int j = mid + 1;
int k = 0;

/**
* 比较两个有序序列
*/
while(i<=mid&&j<=high){

if(arr[i] <= arr[j]){

copyArr[k] = arr[i];
i++;
}else{

copyArr[k] = arr[j];
j++;
}

k++;
}

/**
* 下面两个循环只会执行一个
*/
while(i<=mid){

copyArr[k] = arr[i];
i++;
}

while(j<=high){

copyArr[k] = arr[j];
j++;
}

for(i=0;i<=k;i++){

arr[low+i] = copyArr[i];
}
}
}


效率分析

稳定

空间复杂度:O(n)

时间复杂度:O(nlog2n)

最坏情况:O(nlog2n)

最好情况:O(nlog2n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: