package sdibt;
public class MergeSort {
/**
* 将数组二分
* 将排好的两部分合并
*/
public static void MSort(int[] arr,int left,int right){
if(left<right){
int mid=(left+right)/2;
MSort(arr, left, mid);
MSort(arr, mid+1, right);
Merge(arr,left,right,mid);
/* System.out.print("----");
for (int i : arr) {
System.out.print(i+" ");
}
System.out.println();*/
}
}
/**
* 合并两个有序数组
* @param arr
* @param left
* @param right
* @param mid
*/
public static void Merge(int[] arr, int left, int right, int mid) {
int i=left;
int j=mid+1;
int t=0;
int[] temp=new int[arr.length];
while(i<=mid&&j<=right){
if(arr[i]<arr[j]){
temp[t++]=arr[i++];
}
else{
temp[t++]=arr[j++];
}
}
while(i<=mid){
temp[t++]=arr[i++];
}
while(j<=right){
temp[t++]=arr[j++];
}
t=0;
while(left<=right){
arr[left++]=temp[t++];
}
}
public static void main(String[] args) {
int[] arr={10,8,0,99,10,3,2};
MSort(arr, 0, arr.length-1);
for (int i : arr) {
System.out.print(i+" ");
}
System.out.println();
}
}
归并排序
最新推荐文章于 2024-12-15 17:47:59 发布