您的位置:首页 > 其它

归并排序(递归实现)

2017-12-27 17:16 246 查看
//实现归并排序

//理解简单,实现起来比较麻烦

//难点

//要掌握其中的递归过程

//每一次合并后都要把临时数组的数据合并到原来的数组中

public class Merge {

public static void mergeSort(int[] arr, int first, int last, int[] temp) {
if (first < last) {
int mid = (first + last) / 2;
mergeSort(arr, first, mid, temp);
mergeSort(arr, mid + 1, last, temp);
merge(arr, first, mid, last, temp);
}
}

public static void merge(int[] arr, int first, int mid, int last, int temp[]) {
int i = first;
int j = mid + 1;
int index = 0;
while (i <= mid && j <= last) {

if (arr[i] <= arr[j]) {
temp[index++] = arr[i++];
}

else {
temp[index++] = arr[j++];
}

}

while (i <= mid) {
temp[index++] = arr[i++];
}
while (j <= last) {
temp[index++] = arr[j++];
}

//一定要还原回原来的数组
for (i = 0; i < index; i++) {
arr[first + i] = temp[i];
}
}

public static void main(String[] args) {
int[] arr = { 10, 9, 15, 1, 2, 3 };

int[] temp = new int[arr.length];
mergeSort(arr, 0,  5, temp);
for (int i : arr) {
System.out.println(i);
}
// mergeSort(arr, 0, arr.length - 1, temp);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: