public static void main(String[] args) {
int[]a= new int[]{4,2,4,3,7,5};
precess(a,0,5);
for (int res:a){
System.out.print(res);
}
}
public static void precess(int[]arr,int l,int r){
if(l == r){
return;
}
int mid = l + ((r-l)>>1);
precess(arr,l,mid);
precess(arr,mid+1,r);
merge(arr,l,mid,r);
}
public static void merge(int []arr,int l,int mid , int r){
int[] help = new int[r-l+1];
int pl = l;//左半边指针
int pr = mid+1;//右半边指针
int i = 0;//指向help的指针
while (pl<=mid&&pr<=r){
help[i++] = arr[pl]<arr[pr]?arr[pl++]:arr[pr++];
}
while (pl<=mid){
help[i++] = arr[pl++];
}
//错误:pr<=mid,pr为左半边指针,应该小于右半边的长度
//属于粗心类型的错误
while (pr<=r){
help[i++] = arr[pr++];
}
for (int j = 0;j<help.length;j++){
arr[l+j] = help[j];
}
}
java_归并排序
最新推荐文章于 2023-12-11 10:45:47 发布