程序员必须掌握的8种排序算法(七):归并排序
2017-08-28 19:16
351 查看
七、归并排序
(一)基本思想
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。(二)代码实现
package com.z; import java.util.Arrays; public class Sort { public static void mergeSort(int[] array) { sort(array, 0, array.length - 1); } private static void sort(int[] data, int left, int right) { if (left < right) { // 找出中间索引 int center = (left + right) / 2; // 对左边数组进行递归 sort(data, left, center); // 对右边数组进行递归 sort(data, center + 1, right); // 合并 merge(data, left, center, right); } } private static void merge(int[] data, int left, int center, int right) { int[] tmpArr = new int[data.length]; int centerNext = center + 1; // 记录临时数组的索引 int tmp = left; int index = left; while (left <= center && centerNext <= right) { //从两个数组中取出最小的放入临时数组 if (data[left] <= data[centerNext]) { tmpArr[tmp++] = data[left++]; } else { tmpArr[tmp++] = data[centerNext++]; } } // 若右边数组还有剩余元素,把这些剩余元素依次放入临时数组 while (centerNext <= right) { tmpArr[tmp++] = data[centerNext++]; } // 若左边数组还有剩余元素,把这些剩余元素依次放入临时数组 while (left <= center) { tmpArr[tmp++] = data[left++]; } // 将临时数组中的内容复制回原数组 while (index <= right) { data[index] = tmpArr[index++]; } } public static void main(String[] args) { int[] arr = {52, 57, 59, 68, 28, 33, 72, 96}; System.out.println("Original array: " + Arrays.toString(arr)); mergeSort(arr); System.out.println("Sorted array: " + Arrays.toString(arr)); } }
运行结果:
Original array: [52, 57, 59, 68, 28, 33, 72, 96]
Sorted array: [28, 33, 52, 57, 59, 68, 72, 96]
相关文章推荐
- 程序员必须掌握的8种排序算法(五):冒泡排序
- 程序员必须掌握的8种排序算法(六):快速排序
- 程序员必须掌握的8种排序算法(八):基数排序
- 程序员必须掌握的六种基本排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- 程序员必须掌握的8大排序算法(Java版)
- 03_程序员必须掌握的8大排序算法_简单选择排序
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- 04_程序员必须掌握的8大排序算法_堆排序
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- 05_程序员必须掌握的8大排序算法_冒泡排序
- 程序员必须要掌握的排序算法以及查找方法
- java 常用排序算法/程序员必须掌握的 8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法