package com.iloveu.xxx;

 public class MergeSort {

     static final int SIZE = 15;

     static void mergeOne(int a[],int b[],int n,int len)
{
int i,j,k,s,e;
s=0;
while(s+len<n){
e = s+2*len-1;
if(e>=n){//最后一段可能少于len个节点
e = n -1;
}
//相邻有序段合并
k=s;
i=s;
j=s+len;
while(i<s+len && j<=e){//如果两个有序表都未结束时,循环比较
if(a[i]<=a[j]){//如果较小的元素复制到数组b中
b[k++]=a[i++];
}else{
b[k++]=a[j++];
}
}
while(i<s+len){//未合并的部分复制到数组b中
b[k++]=a[i++];
}
while(j<=e){//未合并的部分复制到数组b中
b[k++]=a[j++]; }
s=e+1;//下一对有序段中左段的开始下标
}
if(s<n){//将剩余的一个有序段从数组a中复制到数组b中
for(;s<n;s++){
b[s] = a[s];
} }
} static void mergeSort(int a[],int n)//合并排序
{
int h,count,len,f; count = 0;//排序步骤
len = 1;//有序序列的长度
f = 0;//变量f作标志 int[] p = new int[n];
while(len<n){
if(f==1){//交替在a和p之间合并
mergeOne(p,a,n,len);//p合并到a
}else{
mergeOne(a,p,n,len);//a合并到p
}
len = len*2;//增加有序序列长度
f=1-f;//使f值在0和1之间切换 count++;
System.out.printf("第"+count+"步排序结果:");//输出每步排序的结果
for(h=0;h<SIZE;h++){
System.out.printf(" "+a[h]); }
System.out.printf("\n");
}
if(f==1){//如果进行了排序
for(h=0;h<n;h++){//将内存p中的数据复制回数组a
a[h]=p[h];
}
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
int[] shuzu=new int[SIZE];
int i; for(i=0;i<SIZE;i++){
shuzu[i] = (int) (100+Math.random()*(100+1));//初始化数组
} System.out.print("排序前的数组为:\n");//输出排序前的数组
for(i=0;i<SIZE;i++){
System.out.print(shuzu[i]+" ");
}
System.out.print("\n"); mergeSort(shuzu,SIZE);//排序操作 System.out.print("排序后的数组为:\n");
for(i=0;i<SIZE;i++){
System.out.print(shuzu[i]+" ");//输出排序后的数组
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.print("\n");
} }

归并排序-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. C#工具:反射帮助类 泛型反射帮助类

    反射帮助类 using System; using System.Reflection; using System.Data; using System.Drawing; using System.R ...

  2. 回顾曾经的自己,献给java初学者的建议

    要不惜代价投资自己,任何对自己的投资都是值得的 要多学习数据结构, 习惯看源码! 一份知识经过n个人的传递早已经不成样子了 遇到问题不要直接百度,百度上那些花里胡哨的东西有用的很少,对症下药才是王道, ...

  3. 类和对象,以及 LeetCode 每日一题

    所有类都是引用类型. 1 定义类 类是某一批对象的抽象. 1.1 定义类的语法: [修饰符] class 类名{ 零到多个构造器定义 零到多个成员变量 零到多个方法 } 对于一个类定义而言,可以包含三 ...

  4. js基础复习点

    1.变量   var num=10;       var num1,num2,num3;   num1=10;   num2=20;   num3=30;       var num1=10,num2 ...

  5. vue 单文件组件中样式加载

    在写单文件组件时,一般都是把标签.脚本.样式写到一起,这样写个人感觉有点不够简洁,所以就想着把样式分离出去. 采用import加载样式 在局部作用域(scoped)采用@import加载进来的样式文件 ...

  6. setTimeout传参 和 运行机制

    1.setTimeout 传参数 setTimeout还允许添加更多的参数.它们将被传入推迟执行的函数(回调函数) 上面代码中,setTimeout共有4个参数.最后那两个参数,将在1000毫秒之后回 ...

  7. Nginx Windows详细安装部署教程

    一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...

  8. 微信小程序之菜鸟入门教学(二)

    昨天学习了一些简单的概念,今天开始实际操作,通过搭建简单的计算器来学习小程序的架构 一.小程序框架 程序框架如上图所示.由此可见,框架的基本构成为: 1. app.js . app.wxss 2. a ...

  9. 基于 libevent 开源框架实现的 web 服务器

    /* 原创文章 转载请附上原链接: https://www.cnblogs.com/jiujue/p/10707153.html   */ 自己实现的如有缺漏欢迎提出 直接代码 一切皆在代码中 首先是 ...

  10. Python基础之字典

    字典初识 字典的认识 首先,我们来认识一下字典: # 定义一个字典 user_dict = {"name": "zhangsan", "age&quo ...