public class Test{
public static void main(String[] args){
int[] arr = {11,6,5,7,9,2,3,15,17};
int find = 10;
}
public static void mergeSort(int[] arr){
int[] temp = new int[arr.length];
mSort(arr,0,arr.length-1,temp);
}
private static void mSort(int[] arr,int left,int right,int temp[]){
if(left<right){
int mid = (left + right) / 2;
mSort(arr,left,mid,temp);
mSort(arr,mid+1,right,temp);
//只剩两个时,mSort进不去,由于left<right
merge(arr,left,mid,right,temp);
}
}
private static void merge(int[] arr,int left,int mid,int right,int temp[]){
int i = left;
int j = mid + 1;
int t = 0;
//1.把左右两边的数组拷贝到temp
while(i<=mid&&j<=right){
if(arr[i]<=arr[j]){
temp[t++] = arr[i++];
}else{
temp[t++] = arr[j++];
}
}
//2.把一边剩余的数组拷贝到temp
while(i<=mid){
temp[t++] = arr[i++]
}
while(j<=right){
temp[t++] = arr[j++]
}
//3.把temp赋值给arr
for(int start = left,i=0;start<=right;start++){
arr[start] = temp[i++];
}
}
}
归并排序
最新推荐文章于 2024-09-22 15:05:13 发布