1.算法思路:
(1)将待排序数组分为两份,利用递归将两份数组排好序
(2)将两个有序数组归并成一个有序数组。
实现方法:
a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出
b.将未溢出的数组剩余的元素加入辅助数组中
c.将辅助数组整体拷贝到原来的数组中
2.代码(JAVA):
public class mergesort{
public static void mergeSort(int[] arr, int l, int r) {
if(l<r){
int mid=l+(r-l)/2;
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,r);
}
}
public void merge(int[] arr,int l,int r){
int[] tmp=new int[r-l+1];
int mid=l+(r-l)/2;int p1=l;
int p2=mid+1;
int i=0;
while(p1<=m&&p2<=r){
if(arr[p1]<arr[p2])
tmp[i++]=arr[p1++];
else
tmp[i++]=arr[p2++];
}
while(p1<=m)
tmp[i++]=arr[p1];
while(p2<=r)
tmp[i++]=arr[p2];
for(i=0;i<arr.length;i++){
arr[l+i]=tmp[i];
}
}
}
3.算法分析:
时间复杂度:O(N*logN)