import java.util.Arrays;
public class MergeSort {
private static void merge(int[] a,int low,int mid,int high){
int[] temp=new int[high-low+1];
int i=low;//左指针
int j=mid+1;//右指针
int k=0;
//把较小的数移到新数组中
while(i<=mid&&j<=high){
if(a[i]<a[j]){
temp[k++]=a[i++];
}else{
temp[k++]=a[j++];
}
}
//把左边剩余的数移入数组
while(i<=mid){
temp[k++]=a[i++];
}
//把右边剩余的数移入数组
while(j<=high){
temp[k++]=a[j++];
}
//把数据从临时数组复制到原来的数组
for(int k2=0;k2<temp.length;k2++){
a[k2+low]=temp[k2];
}
}
/*
* 每次归并的有序集合长度
*/
public static int[] mergeSort(int[] a,int low,int high){
int mid=(low+high)/2;
if(low<high){
//左边
mergeSort(a,low,mid);
//右边
mergeSort(a,mid+1,high);
//左右归并
merge(a, low, mid, high);
}
return a;
}
public static void main(String[] args) {
int []a={2,7,8,3,1,6,9,0,5,4};
mergeSort(a, 0, a.length-1);
System.out.println(Arrays.toString(a));
}
}
归并排序
最新推荐文章于 2024-03-26 17:18:09 发布