package com.zxw.sort;
import java.util.Arrays;
public class MergeSort2 {
public static void main(String[] args) {
int[] nums = new int[]{9, 8, 7, 6, 5, 4, 3, 2, 10,11};
mergeSort(nums);
}
public static void mergeSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
process(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void process(int[] arr, int left, int right) {
if (left == right) {
return;
}
int mid = (left + right) / 2;
process(arr, left, mid);
process(arr, mid + 1, right);
merge(arr,left,mid,right);
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i=0;
int p1=left;
int p2=mid + 1;
//判断两边值是否越界
while (p1 <= mid && p2 <= right) {
/**
* 当左边的值<右边的值时,将左边的值拷贝到help里去
* 否则将右边的值拷贝到help里去
*/
temp[i++] = arr[p1] <= arr[p2]? arr[p1++]:arr[p2++];
}
/**
* 如果p1没有越界,那么将p1剩下的东西全部拷贝到temp中去
*/
while (p1 <= mid) {
temp[i++] = arr[p1++];
}
/**
* 如果p1没有越界,那么将p1剩下的东西全部拷贝到temp中去
*/
while (p2 <= right) {
temp[i++] = arr[p2++];
}
for (i = 0; i < temp.length; i++) {
arr[left + i] = temp[i];
}
}
}
归并排序(java)
最新推荐文章于 2024-06-13 08:37:22 发布