Java基础知识强化56:经典算法之归并排序(MergeSort)

1. 归并排序的原理:

原理,把原始数组分成若干子数组,对每一个子数组进行排序,

继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组

举例:

无序数组[6 2 4 1 5 9]

  先看一下每个步骤下的状态,完了再看合并细节

第一步: [6 2 4 1 5 9]原始状态

第二步: [2 6] [1 4] [5 9]两两合并排序,排序细节后边介绍

第三步: [1 2 4 6] [5 9]继续两组两组合并

第四步: [1 2 4 5 6 9]合并完毕,排序完毕

       输出结果:[1 2 4 5 6 9]

2. 归并排序代码实现:

 1 package cn.itcast;
 2
 3 /*
 4  * 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。   
 5  * 如设有数列{6,202,100,301,38,8,1}   
 6  * 初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数   
 7  * i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3   
 8  * i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4   
 9  * i=3 [ 1 6 8 38 100 202 301 ] 4
10  */
11 public class MergeSort {
12     public static void sort(int[] data) {
13         int[] temp = new int[data.length];
14         mergeSort(data, temp, 0, data.length - 1);
15     }
16
17     private static void mergeSort(int[] data, int[] temp, int l, int r) {
18         int mid = (l + r) / 2;
19         if (l == r)
20             return;
21         mergeSort(data, temp, l, mid);
22         mergeSort(data, temp, mid + 1, r);
23
24         for (int i = l; i <= r; i++) {
25             temp[i] = data[i];
26         }
27         int i1 = l;
28         int i2 = mid + 1;
29         for (int cur = l; cur <= r; cur++) {
30             if (i1 == mid + 1)
31                 data[cur] = temp[i2++];
32             else if (i2 > r)
33                 data[cur] = temp[i1++];
34             else if (temp[i1] < temp[i2])
35                 data[cur] = temp[i1++];
36             else
37
38                 data[cur] = temp[i2++];
39         }
40     }
41 }
时间: 2024-10-23 22:29:49

Java基础知识强化56:经典算法之归并排序(MergeSort)的相关文章

Java基础知识强化(用于自我巩固)以及审查

1. Java 和 JDK 的关系 JDK(Java Development Kit)Java 开发工具包,它包括:编译器.Java 运行环境(JRE,Java Runtime Environment).JVM(Java 虚拟机)监控和诊断工具等 Java 则表示一种开发语言. 2. Java 程序是怎么执行的? 日常工作中使用的开发工具(IntelliJ IDEA 或 Eclipse 等)可以很方便的调试程序,或者是通过打包工具把项目打包成 jar 包或者 war 包,放入 Tomcat 等

Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

java基础知识强化52:Java程序员面试失败的5大原因

下面是Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容. 1 说得太少 尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”.面试官会通过你对这些技术和非技术问题的回答来评估你的激情.他们也会通过模拟团队氛围和与你的交流互动来判断你的经验和能力. 所以,仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣,还会让整个面试过程显得非常无聊.如果你不能很好地说明你的经验.成就和技能可以给企业带来的价

Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版

1.  登录注册IO版的Java项目框架,如下: 2. 具体代码实现: (1)User.java(cn.itcast.game): 1 package cn.itcast.pojo; 2 3 /** 4 * 这是用户基本描述类 5 * 6 * @author 风清扬 7 * @version V1.1 8 * 9 */ 10 public class User { 11 // 用户名 12 private String username; 13 // 密码 14 private String p

Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试

1. Collection集合的基本功能测试: 1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 集合的由来: 8 * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 9 * 而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识

Java基础知识强化103:JSON解析框架汇总

1.Gson Gson是Google提供的一个能够将Java对象转换成相应JSON表达形式的一个开源Java类库,当然用Gson也能将JSON字符串转换成与之等价的Java对象.Gson对于任何Java对象都有效,包括那些预先存在没有源代码的对象. 现在已经有一些能将Java对象转换成JSON的开源项目了.但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的.并且它们也不支持Java泛型.但是Gson却将这两点作为自己非常重要的设计目标. 目标 使用toJs

Java基础知识强化之IO流笔记50:IO流练习之 复制多级文件夹的案例

1. 复制多级文件夹的案例 需求:复制多级文件夹   数据源:E:\JavaSE\day21\code\demos 目的地:E:\   分析:         A:封装数据源File         B:封装目的地File         C:判断该File是文件还是文件夹        a:是文件夹 就在目的地目录下创建该文件夹 获取该File对象下的所有文件或者文件夹File对象 遍历得到每一个File对象 回到C                     b:是文件             

Java基础知识强化之IO流笔记48:IO流练习之 复制单级文件夹案例

1. 复制单级文件夹     数据源:e:\\demo     目的地:e:\\test 分析: A:封装目录 B:获取该目录下的所有文本的File数组 C:遍历该File数组,得到每一个File对象 D:把该File进行复制 2.  代码示例: 1 package cn.itcast_03; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File;

Java基础知识强化之集合框架笔记57:Map集合之HashMap集合(HashMap&lt;Student,String&gt;)的案例

1. HashMap集合(HashMap<Student,String>)的案例 HashMap<Student,String>键:Student      要求:如果两个对象的成员变量值都相同,则为同一个对象.值:String HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里. HashMap 中作为键的对象必须重写Object的hashCode()方法和equals()方法 2. 代码示例: (1)Student.java,如下: 1 pa