程序员必须掌握的8种排序算法(七):归并排序
来源:互联网 发布:php中单引号和双引号 编辑:程序博客网 时间:2024/06/07 08:48
七、归并排序
(一)基本思想
归并(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]
阅读全文
0 0
- 程序员必须掌握的8种排序算法(七):归并排序
- 程序员必须掌握的七种排序算法
- 程序员必须掌握的8种排序算法(五):冒泡排序
- 程序员必须掌握的8种排序算法(六):快速排序
- 程序员必须掌握的十种算法---快速排序算法
- 程序员必须掌握的十种算法---堆排序算法
- 必须掌握的八种排序(7-8)--归并排序,基数排序
- 程序员必须掌握的8种排序算法(八):基数排序
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- css学习笔记2
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- 系统何时发送WM_PAINT消息?
- 图解lucene TermVector
- C# 利用AT指令开发短信功能
- 程序员必须掌握的8种排序算法(七):归并排序
- win7上开启指定端口
- ConcurrentHashMap实现原理
- 关于python AES加密
- POJ
- spring boot
- 基于AT指令开发短信程序
- SpringBoot整合druid数据源及添加Druid监控页面
- POJ