分治法,归并排序
来源:互联网 发布:星际争霸2 免费知乎 编辑:程序博客网 时间:2024/04/28 13:58
1.时间复杂度为O(nlog(n)),
非降序
代码:
package com.cn.insertion;/** * 归并排序,采用分治法的策略 * @author Administrator * */public class Merge_Sort {public static void main(String[] args) {int[] a = new int[]{10, 9, 8, 6, 7, 5, 4, 3, 2, 1};mergeSort(a, 0, 9);for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}/** * 先分在和,逐层递归 * @param a * @param p * @param r */public static void mergeSort(int[] a, int p, int r) {if (p < r) {int q = (p + r)/2;mergeSort(a, p, q);mergeSort(a,q + 1, r);merge(a, p, q, r);}}/** * 归并函数 * @param a * @param p * @param q * @param r */public static void merge(int[] a, int p, int q, int r) {//用另外两个数组来保存前面与后面的两段int n1 = q - p + 1;int n2 = r - q;int[] m = new int[n1 + 1];int[] n = new int[n2 + 1];//保存p--q段for (int i = 0; i < m.length - 1; i++) {m[i] = a[p + i];}m[n1] = Integer.MAX_VALUE;//哨兵牌//保存q--r段for (int i = 0; i < n.length - 1; i++) {n[i] = a[q + i + 1];}n[n2] = Integer.MAX_VALUE;//哨兵牌int i = 0, j = 0;//归并的过程,每次去小的那一个,i, j让两个数组一只往后走for (int k = p; k <= r; k++) {if (m[i] < n[j]) {a[k] = m[i];i++;}else {a[k] = n[j];j++;}}}}
- 分治法,归并排序
- 分治法-归并排序
- 分治法-归并排序
- 归并排序-分治法
- 分治法 - 归并排序
- 分治法--归并排序
- 归并排序 分治法
- 归并排序--分治法
- 分治法 & 归并排序
- 分治法-归并排序
- 分治法-归并排序
- 分治法-归并排序
- 分治法实现归并排序
- 分治法(归并排序)
- 分治法与归并排序
- 分治法实现归并排序
- 分治法与归并排序
- 分治法之归并排序
- 简单的ListBox
- 在Android中使用scala编程(-)
- SYN 洪水攻击
- linux下find命令的用法
- 创建浏览文件夹对话框 .
- 分治法,归并排序
- fw.cpp
- 一类简单数位统计问题的记忆化搜索解法
- 存储过程如何防止一条记录重复插入
- JSP,PHP详细性能测试
- c#中双斜杠和三斜杠注释的差别
- Android培训班(65)dex文件打开
- 还是担心自己的动手能力
- android中的样式和主题