您的位置:首页 > 其它

排序算法之归并排序(Merge_Sort)

2018-03-27 10:54 267 查看
归并 的 含义  “将两个或两个以上的有序表合成一个新的有序表”
merge的思想 : 先将A1[ ],A2[ ] 复制到辅助数组 B[ ]中,每次取较小者放入A中,直至B的某一段为空时,将另一端直接复制到A中。



Java代码:public void mergesort(int[] arr, int first, int mid, int last, int[] temp){
int i = first; int j = mid+1;
int k = 0;
//把较小的数移到数组中
while(i<=mid && j<=last){
if(arr[i]<arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
}
}
while(i<=mid){
temp[k++] = arr[i++]; // 把左边剩余的数移入数组
}
while (j<=last){
temp[k++] = arr[j++]; // 把右边剩余的数移入数组
}
for (int l = 0; l < temp.length; l++) { // 把新数组中的数覆盖nums数组
arr[l+first] = temp[l];
}
}
public void merge(int[] arr, int low, int high){
int mid = (low+high)/2;
if(low<high){
merge(arr,low,mid); //左边
merge(arr,mid+1,high); // 右边
mergesort(arr,low,mid,high,new int[high-low+1]); // 左右归并
}
}

public static void main(String[] args) {
int[] array = {3,2,1,4};
merge(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: