归并排序
按照分治三步法,介绍归并排序步骤:
划分问题:把序列分成元素个数尽量相等的两半;
递归求解:把两半元素分别排序;
合并问题:把两个有序表合并成一个。
前两部分容易完成,关键在于如何合并问题。
归并排序代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void mergeSort(int[] arr,int x,int y,int []temp){
if(y-x<=1)
return;
int m=(x+y)/2;
mergeSort(arr,x,m,temp);
mergeSort(arr,m,y,temp);
int index=x,p=x,q=m;
while(p<m||q<y){
if(p>=m){
temp[index++]=arr[q++];
}else if(q>=y){
temp[index++]=arr[p++];
}else if(arr[p]<=arr[q]){
temp[index++]=arr[p++];
}else{
temp[index++]=arr[q++];
}
}
for(int i=x;i<y;i++){ //将辅助空间的有序元素复制回去
arr[i]=temp[i];
}
}
public static void main(