归并排序算法
基本思想:将待排序的序列(共n个元素)看成n个子序列,然后依次合并相邻的两个子序列,直至变成一个整体有序序列;
特点:稳定排序,非原地排序,时间复杂度O(nlogn);
算法实现:
public class MergeSort {
public int[] merge(int[] a,int[] b){
int al=a.length;
int bl=b.length;
int[] c=new int[al+bl];
int indexA=0,indexB=0,indexC=0;
while(indexA<al&& indexB<bl){
int tmp;
if(a[indexA]<b[indexB]){
tmp=a[indexA];
indexA++;
}
else{
tmp=b[indexB];
indexB++;
}
c[indexC++]=tmp;
}
while(indexA<al){
c[indexC++]=a[indexA++];
}
while(indexB<bl){
c[indexC++]=b[indexB++];
}
return c;
}
public int[] mergeSort(int[] num){
if(num.length==1){
return num;
}
int half=num.length/2;
int a[]=new int[half];
for(int i=0;i<half;i++){
a[i]=num[i];
}
int[] b=new int[num.length-half];
int count=half;
for(int j=0;j<num.length-half;j++){
b[j]=num[count];
count++;
}
int[] c=merge(mergeSort(a),mergeSort(b));
return c;
}
public static void main(String args[]){
int a[]={1,54,68,45,89,74,23};
MergeSort ms=new MergeSort();
int[] result=ms.mergeSort(a);
for(int i=0;i<a.length;i++){
System.out.println(result[i]);
}
}
}