【排序算法】 归并排序 merge sort
来源:互联网 发布:淘宝开店货源一件代发 编辑:程序博客网 时间:2024/04/29 22:20
【排序算法】 归并排序 merge sort
归并排序思路
归并排序的基本思想基于递归地拆分和合并,将两个或两个以上有序表合并成一个新的有序表。
将整个区间递归地拆分为小区间(最小的区间长度为1),然后递归地合并两个有序的区间。
时间复杂度
expense:
平均时间复杂度 O(N*log(N))
最坏时间复杂度 O(N*log(N))
最好时间复杂度 O(N*log(N))
空间复杂度O(N)
应用场景
归并排序实现
package algorithm.algorithm4.ch02_sort;import org.junit.Test;import java.util.Arrays;import java.util.Random;/** * description: * algorithm: merge sort,归并排序 * @author liyazhou * @create 2017-06-21 14:41 */public class Merge { public static void sort(Comparable[] arr){ if (arr == null || arr.length < 2) return; Comparable[] aux = new Comparable[arr.length]; // 归并排序所需要的辅助空间 sort(arr, 0, arr.length-1, aux); } private static void sort(Comparable[] arr, int low, int high, Comparable[] aux) { if (low >= high) return; int mid = low + (high - low)/2; sort(arr, low, mid, aux); // 将左部区间排序 sort(arr, mid+1, high, aux); // 将右部区间排序 merge(arr, low, mid, high, aux); // 归并左右两部分区间的结果 } /** * 合并位于 [low, mid] 和 [mid+1, high] 这两段闭区间内的元素 * 每一个区间的内部都是有序的 * @param arr 序列 * @param low 开始索引 * @param mid 中间索引 * @param high 末尾索引 * @param aux 辅助空间 */ private static void merge(Comparable[] arr, int low, int mid, int high, Comparable[] aux) { int i = low; int j = mid + 1; for (int k = low; k <= high; k ++) aux[k] = arr[k]; int k = low; while (i <= mid && j <= high){ if (aux[i].compareTo(aux[j]) < 0) arr[k++] = aux[i++]; else arr[k++] = aux[j++]; } while (i <= mid) arr[k++] = aux[i++]; while (j <= high) arr[k++] = aux[j++]; } @Test public void test(){ Random random = new Random(); int N = 20; Integer[] arr = new Integer[N]; for (int i = 0; i < N; i ++) arr[i] = random.nextInt(100); System.out.println(Arrays.toString(arr)); Merge.sort(arr); System.out.println(Arrays.toString(arr)); }}
阅读全文
1 0
- 【算法】归并排序 merge sort
- 归并(Merge Sort)排序算法
- 算法-归并排序(Merge-Sort)
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 【排序算法】 归并排序 merge sort
- 归并排序(merge sort)
- 归并排序(Merge sort)
- 归并排序Merge-Sort
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序Merge sort
- 归并排序 (Merge Sort)
- 归并排序(Merge Sort)
- 图的基本adt实现
- Win10安装CUDA+Cudnn+Theano问题汇总
- Thinking in java-27 Runtime Type Identification运行时类型确定
- 设计模式(Design Pattern)
- java学习 jstl中set标签的使用
- 【排序算法】 归并排序 merge sort
- 如何使用GDB调试多线程
- java中list,set,Map集合的遍历方式
- Windows 命令行中启动ORACLE服务与实例
- 学习Linux命令(39)
- 面试题26:复杂链表的复制
- POJ1127_Jack Straws_叉积::判断两线段是否相交
- IOS开发疑难杂症排查-NSNotificationCenter通知消息排查
- 虚继承与虚函数继承