1. package com.iloveu.xxx;
  2.  
  3. public class MergeSort {
  4.  
  5. static final int SIZE = 15;
  6.  
  7. static void mergeOne(int a[],int b[],int n,int len)
  8. {
  9. int i,j,k,s,e;
  10. s=0;
  11. while(s+len<n){
  12. e = s+2*len-1;
  13. if(e>=n){//最后一段可能少于len个节点
  14. e = n -1;
  15. }
  16. //相邻有序段合并
  17. k=s;
  18. i=s;
  19. j=s+len;
  20. while(i<s+len && j<=e){//如果两个有序表都未结束时,循环比较
  21. if(a[i]<=a[j]){//如果较小的元素复制到数组b中
  22. b[k++]=a[i++];
  23. }else{
  24. b[k++]=a[j++];
  25. }
  26. }
  27. while(i<s+len){//未合并的部分复制到数组b中
  28. b[k++]=a[i++];
  29. }
  30. while(j<=e){//未合并的部分复制到数组b中
  31. b[k++]=a[j++];
  32.  
  33. }
  34. s=e+1;//下一对有序段中左段的开始下标
  35. }
  36. if(s<n){//将剩余的一个有序段从数组a中复制到数组b中
  37. for(;s<n;s++){
  38. b[s] = a[s];
  39. }
  40.  
  41. }
  42. }
  43.  
  44. static void mergeSort(int a[],int n)//合并排序
  45. {
  46. int h,count,len,f;
  47.  
  48. count = 0;//排序步骤
  49. len = 1;//有序序列的长度
  50. f = 0;//变量f作标志
  51.  
  52. int[] p = new int[n];
  53. while(len<n){
  54. if(f==1){//交替在a和p之间合并
  55. mergeOne(p,a,n,len);//p合并到a
  56. }else{
  57. mergeOne(a,p,n,len);//a合并到p
  58. }
  59. len = len*2;//增加有序序列长度
  60. f=1-f;//使f值在0和1之间切换
  61.  
  62. count++;
  63. System.out.printf("第"+count+"步排序结果:");//输出每步排序的结果
  64. for(h=0;h<SIZE;h++){
  65. System.out.printf(" "+a[h]);
  66.  
  67. }
  68. System.out.printf("\n");
  69. }
  70. if(f==1){//如果进行了排序
  71. for(h=0;h<n;h++){//将内存p中的数据复制回数组a
  72. a[h]=p[h];
  73. }
  74. }
  75. }
  76.  
  77. public static void main(String[] args) {
  78. // TODO Auto-generated method stub
  79. int[] shuzu=new int[SIZE];
  80. int i;
  81.  
  82. for(i=0;i<SIZE;i++){
  83. shuzu[i] = (int) (100+Math.random()*(100+1));//初始化数组
  84. }
  85.  
  86. System.out.print("排序前的数组为:\n");//输出排序前的数组
  87. for(i=0;i<SIZE;i++){
  88. System.out.print(shuzu[i]+" ");
  89. }
  90. System.out.print("\n");
  91.  
  92. mergeSort(shuzu,SIZE);//排序操作
  93.  
  94. System.out.print("排序后的数组为:\n");
  95. for(i=0;i<SIZE;i++){
  96. System.out.print(shuzu[i]+" ");//输出排序后的数组
  97. try {
  98. Thread.sleep(1000);
  99. } catch (InterruptedException e) {
  100. // TODO Auto-generated catch block
  101. e.printStackTrace();
  102. }
  103. }
  104. System.out.print("\n");
  105. }
  106.  
  107. }

归并排序-JAVA实现的更多相关文章

  1. 归并排序 求逆序数 链表的归并排序 多线程归并排序 java

    import java.util.Scanner; public class Main { private static int count=0; public static void mergeso ...

  2. 二路归并排序java实现

    二路归并排序:其核心思想时将问题一分为二,并递归调用一分为二方法,使问题分割到不能再分各的原子问题,然后再归并,从实现原子问题开始,层层向上归并,最终解决整体问题.即所谓“分而治之,万流归一” 二路归 ...

  3. 自顶向下(递归)的归并排序和自底向上(循环)的归并排序——java实现

    归并排序有两种实现方式,自顶向下和自底向上.前者的思想是分治法,现将数组逐级二分再二分,分到最小的两个元素后,逐级往上归并,故其核心在于归并.后者的思想相反,采用循环的方式将小问题不断的壮大,最后变成 ...

  4. 单向链表的归并排序——java实现

    在做Coursera上的Algorithms第三周测验练习的时候有一道链表随机排序问题,刚开始没有什么思路,就想着先把单向链表归并排序实现了,再此基础上进行随机排序的改造.于是就结合归并排序算法,实现 ...

  5. 归并排序-java

    排序-归并排序 基本思想:是指将两个或两个以上的有序表合并成一个新的有序表. 具体步骤: (1首先将整个表看成是n个有序子表,每个子表的长度为1. (2)然后两两归并,得到n/2个长度为2的有序子表. ...

  6. leetcode23 多个拍好序的链表进行归并排序 (java版本)

    题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...

  7. 归并排序java

    import java.util.Arrays; public class MergeSort { public static void main(String[] args) { MergeSort ...

  8. 归并排序—Java版

    一开始做算法的时候,感觉递归算法很绕,所以我就在阅读别人代码的基础上,对代码每一步都添加自己的注解,方便我以后的学习. public class MergeSort { /** * 归并排序 * @p ...

  9. 归并排序Java实现

    package practice; import edu.princeton.cs.algs4.*; /* * 归并排序 * 时间复杂度O(NlgN) N为数组长度 * 归并排序在小数组上表现并不好可 ...

  10. 归并排序——Java实现

    一.排序思想 将两个或两个以上的一排序文件合并成一个有序文件的过程叫归并,而归并排序就是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用.将以有序的了序列合并,得到完全有序 ...

随机推荐

  1. 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现

    前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...

  2. 【带着canvas去流浪】(2)绘制折线图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 3.1 一般折线图 3.2 用贝塞尔曲线绘制平滑折线图 四. 大数据量场景 示例代码托管在:https://github.com/dashnowo ...

  3. DS标签控件文本解析格式

    DS标签控件使用DSL文本渲染引擎,支持DSL引擎代码.目前支持代码如下: <b>粗体</b> 以粗体显示 <i>斜体</i> 以斜体显示 <u& ...

  4. [转]Blue Prism Architecture

    本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...

  5. tomcat,httpd 日志格式说明

    tomcat 日志说明 配置文件server.xml 默认日志格式为 pattern="%h %l %u %t "%r" %s %b" 推荐使用 pattern ...

  6. js常用JSON数据操作

    JSON字符串: var  str = '{"name": "jack", "age": 13}'; JSON对象: var obj = { ...

  7. es6之三个点(...)扩展运算符

    我们看一个语法,你就知道es6对我们码农多友好,毕竟世界在进步 let arr=[1,2,3,4,54,56] console.log(...arr) 结果是????? 没错 ...这个运算符就是把这 ...

  8. 硬杠后端(后端坑系列)——Django前期工作

    Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC的框架模式. MVC MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件 ...

  9. 用Gogs在Windows上搭建Git服务

    1.下载并安装Git,如有需求,请重启服务器让Path中的环境变量生效. 2.下载并安装Gogs,请注意,在Windows中部署时,请下载MiniWinService(mws)版本. 3.在Maria ...

  10. Python数据挖掘

    Python之所以如此流行,原因在于它的数据分析和挖掘方面表现出的高性能,而我们前面介绍的Python大都集中在各个子功能(如科学计算.矢量计算.可视化等),其目的在于引出最终的数据分析和数据挖掘功能 ...