数据结构与算法:十大排序算法之归并排序

package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/12*/public class MergeSort {/** 将一个数组中的两个相邻有序区间合并成一个** 参数说明:*     a -- 包含两个有序区间的数组*     start -- 第1个有序区间的起始地址。*     mid   -- 第1个有序区间的结束地址。也是第2个有序区间的起始地址。*     end   -- 第2个有序区间的结束地址。*/public static void merge(int[] a, int start, int mid, int end) {int[] tmp = new int[end-start+1];    // tmp是汇总2个有序区的临时区域int i = start;            // 第1个有序区的索引int j = mid + 1;        // 第2个有序区的索引int k = 0;                // 临时区域的索引while(i <= mid && j <= end) {if (a[i] <= a[j])tmp[k++] = a[i++];elsetmp[k++] = a[j++];}while(i <= mid)tmp[k++] = a[i++];while(j <= end)tmp[k++] = a[j++];// 将排序后的元素,全部都整合到数组a中。for (i = 0; i < k; i++)a[start + i] = tmp[i];tmp=null;}/** 归并排序(从上往下)** 参数说明:*     a -- 待排序的数组*     start -- 数组的起始地址*     endi -- 数组的结束地址*/public static void mergeSortUp2Down(int[] a, int start, int end) {if(a==null || start >= end)return ;int mid = (end + start)/2;mergeSortUp2Down(a, start, mid); // 递归排序a[start...mid]mergeSortUp2Down(a, mid+1, end); // 递归排序a[mid+1...end]// a[start...mid] 和 a[mid...end]是两个有序空间,// 将它们排序成一个有序空间a[start...end]merge(a, start, mid, end);}/** 对数组a做若干次合并:数组a的总长度为len,将它分为若干个长度为gap的子数组;*             将"每2个相邻的子数组" 进行合并排序。** 参数说明:*     a -- 待排序的数组*     len -- 数组的长度*     gap -- 子数组的长度*/public static void mergeGroups(int[] a, int len, int gap) {int i;int twolen = 2 * gap;    // 两个相邻的子数组的长度// 将"每2个相邻的子数组" 进行合并排序。for(i = 0; i+2*gap-1 < len; i+=(2*gap))merge(a, i, i+gap-1, i+2*gap-1);// 若 i+gap-1 < len-1,则剩余一个子数组没有配对。// 将该子数组合并到已排序的数组中。if ( i+gap-1 < len-1)merge(a, i, i + gap - 1, len - 1);}/** 归并排序(从下往上)** 参数说明:*     a -- 待排序的数组*/public static void mergeSortDown2Up(int[] a) {if (a==null)return ;for(int n = 1; n < a.length; n*=2)mergeGroups(a, a.length, n);}public static void main(String[] args) {int i;int a[] = {80,30,60,40,20,10,50,70};System.out.printf("before sort:");for (i=0; i<a.length; i++)System.out.printf("%d ", a[i]);System.out.printf("\n");mergeSortUp2Down(a, 0, a.length-1);        // 归并排序(从上往下)//mergeSortDown2Up(a);                    // 归并排序(从下往上)System.out.printf("after  sort:");for (i=0; i<a.length; i++)System.out.printf("%d ", a[i]);System.out.printf("\n");}
}

[引用](

数据结构与算法:十大排序算法之归并排序相关推荐

  1. 排序算法——十大排序算法的图示与实现

    十大排序算法概览 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于 ...

  2. 排序算法——十大排序算法总结与对比

    一.十大排序算法复杂度对比 二.关于排序算法的总结 1.基数排序仅仅适用于整型数的排序,一般不与另外的排序方法一起比较. 2.关于算法的稳定性:不稳定的算法有 "快希选堆"--快速 ...

  3. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  4. 数据结构与算法:十大排序算法之插入排序

    数据结构与算法:十大排序算法之插入排序 package TopTenSortingAlgorithms;import java.util.Arrays; import java.util.Scanne ...

  5. 数据结构与算法:十大排序算法之堆排序

    数据结构与算法:十大排序算法之堆排序 堆排序可以说是选择排序的优化 package TopTenSortingAlgorithms;import java.util.Arrays; import ja ...

  6. 数据结构与算法:十大排序算法之冒泡排序

    数据结构与算法:十大排序算法之冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换 ...

  7. 【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章

    原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080be ...

  8. 数据结构与算法——十大排序

    排序 1.排序的基本定义 排序:就是使一串记录,按照其中的某个或者某些关键字的大小,递增或递减的排列起来的操作. 排序算法:就是如何使得记录按照要求排列的方法.排序算法在很多领域都得到很大的重视,尤其 ...

  9. 这或许是东半球分析十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...

最新文章

  1. int?和int的区别
  2. 【计算理论】可判定性 ( 可判定性总结 )
  3. java打印字符串引用_Java中的字符串及其中的常用方法
  4. BIO、伪异步 IO、AIO和NIO
  5. 统计学习基础(ESL)中文版
  6. 关于android中的armeabi、armeabi-v7a、arm64-v8a及x86等用splits用指定打包
  7. origin 一键导出文件夹中所有图形
  8. 单例模式详解(线程安全,饿汉,懒汉模式)
  9. 在文档类中控制舞台上影片剪辑
  10. 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8
  11. Unable to acquire the dpkg frontend lock
  12. 为了适应云数据库mySQL产品_金山云数据库RDSMySQL的产品功能大解析
  13. java免费浏览器,Java swing实现简单的浏览器源码免费分享
  14. JAVA衣依服装销售平台计算机毕业设计Mybatis+系统+数据库+调试部署
  15. linux内存回收(一)---kswapd回收
  16. linux服务安装与配置(二):安装xinetd服务
  17. 转:数据可视化怎么学?看完本文你将理解透彻!
  18. 文件管理之文件(外存)分配管理 恩赐解脱
  19. 【互联网品读】京东,真的服了,东哥走火入魔了?全员绩效合同
  20. sandstone hypercube超融合一体机知识

热门文章

  1. Mybatis原理分析之二:框架整体设计
  2. autolayout中 top layout guide详解
  3. 文本框获取焦点时,去掉边框
  4. [原创]网站HTML,XHTML,XML,WML,CSS等测试验证工具介绍
  5. Zabbix agent批量自动部署
  6. Linux Shell 在运维中的经验总结
  7. 详解ifconfig命令
  8. Eclipse Ctrl+Alt+↓ 失效问题解决
  9. Retrofit 使用flatmap操作符时处理错误、异常
  10. /var/spool/clientmqueue目录下存在大量文件的原因及解决方法