归并排序(递归实现)
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);
}
}
//理解简单,实现起来比较麻烦
//难点
//要掌握其中的递归过程
//每一次合并后都要把临时数组的数据合并到原来的数组中
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);
}
}
相关文章推荐
- 归并排序的递归以及迭代两种实现和优化
- 归并排序的递归实现
- 归并排序递归与非递归实现
- 归并排序数组实现之递归和非递归方法
- 递归和迭代两种方式实现归并排序(Java版)
- 归并排序、二分法查找的递归实现
- 递归实现归并排序(基本排序算法)
- 归并排序 C++/Java 递归实现代码 -犯了菜鸟老毛病
- 归并排序(Merge Sort)递归、非递归 Java实现
- 排序——归并排序(递归实现+迭代实现 )
- <转> - 归并排序(递归实现+非递归实现+自然合并排序)
- 归并排序(递归实现+非递归实现+自然合并排序)
- 归并排序的非递归实现
- 归并排序(递归实现)
- 递归方法实现归并排序
- 归并排序 (非递归版本) C实现~
- 归并排序三种实现方法(递归、非递归和自然合并排序)
- C#实现归并排序(递归,非递归,自然归并)
- 递归思想详解以及归并排序(java实现)
- 数组的归并排序(经典实现:使用Ο(n)的辅助空间,递归)