Java经典面试题 带答案(五)

不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通

常来说,一个使用者会有一个相对应的 Stateful Session Bean 的

实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责

  • 7 -

记录使用者状态,也就是说当使用者呼

叫 Stateless Session Bean 的时候,EJB Container 并不会

找寻特定的 Stateless Session Bean 的实体来执行这

个 method。换言之,很可能数个使用者在执行某

个 Stateless Session Bean 的 methods 时,会是同一

个 Bean 的 Instance 在执行。从内存方面来

看, Stateful Session Bean 与 Stateless Session Bea

n 比较, Stateful Session Bean 会消耗 J2EE Server 较

多的内存,然而 Stateful Session Bean 的优势却在于他可以维持

使用者的状态。

23、EJB 与 JAVA BEAN 的区别?

答:Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上

讲,任何一个 Java 类都可以是一个 Bean。但通常情况下,由于 Java Bean

是被容器所创建(如 Tomcat)的,所以 Java Bean 应具有一个无参的构造器,

另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久

性。Java Bean 实际上相当于微软 COM 模型中的本地进程内 COM 组件,它是

不能被跨进程访问的。Enterprise Java Bean 相当于 DCOM,即分布式组

件。它是基于 Java 的远程方法调用(RMI)技术的,所以 EJB 可以被远程访问

(跨进程、跨计算机)。但 EJB 必须被布署在诸如 Webspere、WebLogic 这

样的容器中,EJB 客户从不直接访问真正的 EJB 组件,而是通过其容器访问。

EJB 容器是 EJB 组件的代理,EJB 组件由容器所创建和管理。客户通过容器来

访问真正的 EJB 组件。

  • 8 -

24、简单介绍您所了解的 MVC。

答案:略

二、软件工程方面

1.软件开发生命周期有哪几个阶段?

答案:1)、问题的定义及规划

2)、需求分析

3)、软件设计

4)、程序编码

5)、软件测试

6)、运行维护

2、什么是 CMM?划分为哪几级、分别是什么?

答案:CMM 是软件能力成熟度模型,是一种用于评价软件承包能力并帮助其改善

软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估。CMM

分为五个等级:一级为初始级,二级为可重复级,三级为已定义级,四级为已管

理级,五级为优化级。

三、智力测试

1 、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确

定一段 15 分钟的时间?

答案: 一只两头点燃,另一只一头点燃,当第一只烧完后,第二只丙再头点燃,

就可以得到 15`

2、有三个人去住旅馆,住三间房,每一间房$10 元,于是他们一共付给老板$30,

第二天,老板觉得三间房只需要$25 元就够了于是叫小弟退回$5 给三位客人,

  • 9 -

谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人

每人各花了九元,

于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们

三个人一共付出$30 那么还有$1 呢?

答案:怎么会是每人第天九元呢,每人每天 (25/3) + 1,那一元差在

25 - 24 = 1

3、有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小

完全相同,

而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们

每人怎样才能取回黑袜和白袜各两对呢?

答案:每人取每双中的一只就可以了

4、有一辆火车以每小时 15 公里的速度离开洛杉矶直奔纽约,另一辆火车以每

小时 20 公里的速度从纽约开往洛杉矶。如果有一只鸟,以 30 公里每小时的速

度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火

车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?

答案:(D / 35 ) * 30 = D

5、你有两个罐子,50 个红色弹球,50 个蓝色弹球,随机选出一个罐子,随机

选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,

得到红球的准确几率是多少?

答案:自己睁着眼睛挑一个红色的啊,这样是给红色最大的机会了,除了你是色

盲,呵呵 ,当然他们的几率都是 1/2。 6、你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污

染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?

答案:一个中取一个编号,然后称一下就知道

7、你有一桶果冻,其中有%%,绿色,红色三种,闭上眼睛,抓取两个同种颜

色的果冻。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

答案:4 个

  • 10 -

8、对一批编号为 1~100,全部开关朝上(开)的灯进行以下*作:凡是 1 的倍

数反方向拨一次开关;2 的倍数反方向又拨一次开关;3 的倍数反方向又拨一次

开关……问:最后为关熄状态的灯的编号。

9 想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上

下?

答案:因为照镜子时,镜子是与你垂直平行的,但在水平方向刚好转了 180 度。

10 一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有

一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家

看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,

就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关

灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问

有多少人戴着黑帽子?

答案:应该是三个人:

1,若是两个人,设 A、B 是黑帽子,第二次关灯就会有人打耳光。原因是 A

看到 B 第一次没打耳光,就知道 B 也一定看到了有带黑帽子的人,可 A 除了知

道 B 带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人!同理 B

也是这么想的,这样第二次熄灯会有两个耳光的声音。

2,如果是三个人,A,B,C. A 第一次没打耳光,因为他看到 B,C 都是带黑

帽子的;而且假设自己带的是白帽子,这样只有 BC 戴的是黑帽子;按照只有两

个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有。。。于是他知道

B 和 C 一定看到了除 BC 之外的其他人带了黑帽子,于是他知道 BC 看到的那个

人一定是他,所以第三次有三个人打了自己一个耳光!

3,若是第三次也没有人打耳光,而是第四次有人打了耳光,那么应该有几个

人带了黑猫子呢?大家给个结果看看_

11 两个圆环,半径分别是 1 和 2,小圆在大圆内部绕大圆圆周一周,问小圆自

身转了几周?如果在大圆的外部,小圆自身转几周呢?

答案:可以把圆看成一根绳子,大绳是小绳的 2 倍长,所以应该是 2 圈吧

  • 11 -

12 1 元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有 20 元钱,最多可

以喝到几瓶汽水?

答案:一开始 20 瓶没有问题,随后的 10 瓶和 5 瓶也都没有问题,接着把 5 瓶

分成 4 瓶和 1 瓶,前 4 个空瓶再换 2 瓶,喝完后 2 瓶再换 1 瓶,此时喝完后手

头上剩余的空瓶数为 2 个,把这 2 个瓶换 1 瓶继续喝,喝完后把这 1 个空瓶换

1 瓶汽水,喝完换来的那瓶再把瓶子还给人家即可,所以最多可以喝的汽水数为:

20+10+5+2+1+1=40

四、数据库

1、设有关系 R(S,D,M)其函数一览集 F={SÆD,DÆM}。则关系 R 至多满足

_____。

A. INF B. 2NF C. 3NF D. 4NF

答案:B

2、which are DML statements(choose all that apply)(下面哪个

是 DML 语句多选)

A. commit B. merge C.update D.delete E. creat F. drop

答案:C,D

3、whice select statement will the result ‘ello world’from

the string’Hello world’?(如果要从字符串“Hello world”中提取出

“ello world”这样的结果,下面的哪条 SQL 语句适合?)

A. select substr(‘Hello World’,1)from dual;

B. select substr(‘Hello World’,1,1)from dual;

C. select lower(substr(‘Hello world’,1))from dual;

D. select lower(trim(‘H’ from ‘Hello world’) )from dual;

答案:D

3、储存过程和函数的区别是什么

  • 12 -

答案:存储过程是用户定义的一系列 SQL 语句的集合,涉及特定表或其他对象

的任务,用户可以调用存储过程。而函数通常是数据库已经定义的方法,它接受

参数并返回某种类型的值,并且不涉及特定用户表。

4、事务是什么?

答案:1)原子性:事务必须是原子工作单元。对于其数据修改,要么全都执行,

要么全都不执行。

2)一致性:事务在完成时,必须使所有的数据都保持一致。在相关数据库中,

所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所

有的内部数据结构都必须是正确的。

3)隔离性:由并发事务所做的修改必须与任何其他并发事务作的修改隔离。事

务查看数据更新时数据所处的状态,要么是另一并发事务修改它之前的状态,要

么是另一事务修改它之后的状态,失误不会查看中间状态的数据,这称为可串行

性,因为它能够重新装载起初始数据,并且重播一系列事务,以使数据结束时的

状态与原始事务执行的状态相同。

4)持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系

统故障也将一直保持。

5、游标的作用是什么?如何知道游标已经到了最后?

答案:游标用于定位结果集的行。通过判断全局变量@@FETCH_STATUS 可以判

断其是否到了最后。通常此变量不等于 0 表示出错或到了最后。

6、触发器分为事前触发和事后触发,这两种触发有什么区别?语句级出发和行

级触发有何区别?

答案:事前触发器运行于触发事件运行之前,而事后触发器运行于触发事件发生

之后。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的

每一行触发一次。

7、找出表 ppp 里面 num 最小的数,不能使用 min 函数

答案:select * from ppp where num<=all(select num from ppp)

或者

Select top 1 num from ppp order by num

8、找出表 ppp 里面最小的数,可以使用 min 函数

答案:select * from ppp where num = (select Min(num)from ppp)

  • 13 -

9、选择表 ppp2 中 num 重复的纪录

答案:select * from ppp2 where num in(select num from ppp2 group

by num having(count(num)>1))

10、为了防止在查询记录的时候被其他用户更改记录,应该采用什么方法?如

何用查询语句实现该方法?

答案:添加一个“时间戳”类型的字段就可以了。 Timestamp 这种数据类型会

根据当前时间自动产生一个时间字符串,确保这些数在数据库中是唯一的。

Timetamp 一般用做给表行加版本戳的机制,存储大小为 8 字节。一个标志能

有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,

timestamp 列中的值均会更新。这一属性使 timestamp 列不适合为关键是用,

尤其是不能作为主键是用。对行的任何更新都会更改 timestamp 值,从而更改

键值。

五、Java 框架方面

1、关键的 Struts 标签种类?

Bean 标签、html 标签、logic 标签、nested 标签。

2、EJB 的三种 bean?

会话 bean、实体 bean、消息驱动 bean。 3、什么是 Ajax?

Ajax 的全称是:AsynchronousJavaScript+XML

Ajax(AsynchronousJavaScriptandXML)是结合了 Java 技术、XML 以 及 JavaScript 等编程技术,可以让开发人员构建基于 Java 技术的 Web 应用,

并打破了使用页面重载的惯例。

  • 14 -

4、简单地说一下什么是 Hibernate?

Hibernate 是 ORmaping 的一种实现

是目前在 JAVA 界使用非常广泛的 ORMapping 的一种实现

可以实现关系型数据库和对象之间的映射。

用来开发数据库系统非常方便。

可以将数据库和程序的设计融合在一起

不会在出现以前那样程序是面向对象的,但是一到数据库那里就乱套了的想象。

5、Struts 工作流程是什么?

一个用户的请求是通 ActionServlet 来处理和转发的。那么,

ActionServlet 如何决定把用户请求转发给哪个 Action 对象呢?这就需要

一些描述用户请求路径和 Action 衍射关系的配置信息了。在 Struts 中,这

些配置映射信息都存储在特定的 XML 文件 Struts-config.xml 中。在该配

置文件中,每一个 Action 的映射信息都通过一个元素来配置。

这些配置信息在系统启动的时候被读入内存,供 Struts 在运行期间使用。

在内存中,每一个 元素都对应一个

org.apache.struts.action.ActionMapping 类的实例。

对于采用 Struts 框架的 web 应用,在 web 应用启动时就会加载并初始化

ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配

置信息,把它们存放到各个配置对象中,例如 Action 的映射信息存放在

ActionMapping 对象中。

当 ActionServlet 接收到一个客户请求时,将执行如下流程:

1.检索和用户请求相匹配的 ActionMapping 实例,如果不存在,就返回用户

请求路径无效信息。

2.如 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交

  • 15 -

的表单数据保存到 ActionForm 对象中。

3.根据配置信息决定是否需要表单验证。如果需要验证,就调用 ActionForm

的 Validate()方法。

4.如果 ActionForm 的 Validate()方法返回 null 或返回一个不包含

ActionMessage 的 ActionErrors 对象,就表示表单验证成功。

5.ActionServlet 根据 ActionMapping 实例包含的映射信息决定将请求转

发给哪个 Action。如果相应的 Action 实例不存在,就先创建这个实例,然后

调用 Action 的 execute()方法。

6 . Action 的 execute ()方法返回一个 ActionForward 对象,

ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。

7.ActionForward 对象指向的 JSP 组件生成动态网页,返回给客户。

6、谈一谈你对 Spring 的认识?

Spring 是 Rod 主创的一个应用于 J2EE 领域的轻量应用程序框架,其核心

是一个 IOC 容器以及 AOP 实现,在核心上面的一个主要部件是数据访问 DAO 框

架,包括一个自己的 JDBC 数据访问封装以及对众多 ORM 系统的集成支持。

Spring 还内置一个功能强大、灵活的 Web MVC 框架,以提供快速的 Java Web

应用程序开发,同时 Spring 还提供了以其它各种 MVC 框架或视图技术的集成。

通过 Spring 的核心容器及 AOP 的应用,Spring 提供了统一的声明式系统级

服务支持。

7、白盒测试一般所以的工具是什么?

Junit

  • 16 -

8、什么是 Ioc 和 AOP?

控制反转、面向切面编程

六、XML 方面

1、解析 xml 的四种解析器?区别是什么?

DOM 是基于平台、语言无关的官方 W3C 标准。基于树的层次,其优点是可

以移植,编程容易,开发人员只需要调用建树的指令。其缺点是加载大文件不理

想。

SAX 是基于事件模型的,它在解析 XML 文档的时候可以触发一系列的事

件,当发现给定的 tag 的时候,它可以激活一个回调方法,告诉该方法制定的

标签已经找到。类似与流媒体的解析方式,所以在加载大文件时效果不错。

JDOM 是想成为 Java 特定文档模型。它简化与 XML 的交互并且比使用

DOM 实现更快。使用的是具体类不使用接口,运用了大量的 Collections 类,

方便程序员。

DOM4J 是一个独立的开发结果。是一个非常非常优秀的 Java XML API,

具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的

软件。推荐使用。

2、XML 文档定义有几种形式?它们之间有何本质区别?

两种形式 dtd,schema

本质区别:schema 本身是 xml 的,可以被 XML 解析器解析(这也是从 DTD 上发

展 schema 的

根本目的)

七、网络基础方面

1、网络的 7 层协议是?

第一层 是物理层

第二层 是数据链路层

  • 17 -

第三层 是网络层

第四层 是运输层

第五层 是会话层

第六层 是表示层

第七层 是应用层

第一层,物理层

OSI 模型最低层的“劳苦大众”。它透明地传输比特流,就是传输的信号。该层

上的设备包括集线器、发送器、接收器、电缆、连接器和中继器。

第二层,数据链路层

这一层是和包结构和字段打交道的和事佬。一方面接收来自网络层(第三层)的

数据帧并为物理层封装这些帧;另一方面数据链路层把来自物理层的原始数据比

特封装到网络层的帧中。起着重要的中介作用。

数据链路层由 IEEE802 规划改进为包含两个子层:介质访问控制(MAC)和逻

辑链路控制(LLC)。

第三层,网络层

这一层干的事就比较多了。它工作对象,概括的说就是:电路、数据包和信息交

换。

网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地

址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务

就是把这些包分成较小的包。

这些光荣的任务就派给了路由器、网桥路由器和网关。

第四层,传输层。

确保按顺序无错的发送数据包。传输层把来自会话层的大量消息分成易于管理的

包以便向网络发送。

第五层,会话层。

在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会

话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。

允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。

第五层,会话层。

在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会

话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。

允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。

第六层,表示层。

定义由应用程序用来交换数据的格式。在这种意义上,表示层也称为转换器

(translator)。该层负责协议转换、数据编码和数据压缩。转发程序在该层

进行服务操作。

第七层,应用层,该层是 OSI 模型的最高层。应用层向应用进程展示所有的网

  • 18 -

络服务。当一个应用进程访问网络时,通过该层执行所有的动作。

2、电子邮件传输协议是?

SMTP

3、文件传输是基于哪种协议的?

TCP

4、一个 C 类网络最多能容纳多少台主机?

254

八、算法方面

1、插入排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class InsertSort implements SortUtil.Sort{

/* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

_/ public void sort(int[] data) {

int temp;

for(int i=1;i<data.length;i++){

for(int j=i;(j>0)&&(data[j]<data[j-1]);j–){

SortUtil.swap(data,j,j-1);

}

}

}

}

2、冒泡排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class BubbleSort implements SortUtil.Sort{

/_ (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/ public void sort(int[] data) {

  • 19 -

int temp;

for(int i=0;i<data.length;i++){

for(int j=data.length-1;j>i;j–){

if(data[j]<data[j-1]){

SortUtil.swap(data,j,j-1);

}

}

}

}

}

3、选择排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class SelectionSort implements SortUtil.Sort {

/*

  • (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/ public void sort(int[] data) {

int temp;

for (int i = 0; i < data.length; i++) {

int lowIndex = i;

for (int j = data.length - 1; j > i; j–) {

if (data[j] < data[lowIndex]) {

lowIndex = j;

}

}

SortUtil.swap(data,i,lowIndex);

}

}

}

4、Shell 排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ShellSort implements SortUtil.Sort{

  • 20 -

/* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

_/ public void sort(int[] data) {

for(int i=data.length/2;i>2;i/=2){

for(int j=0;j<i;j++){

insertSort(data,j,i);

}

}

insertSort(data,0,1);

}

/_*

  • @param data

  • @param j

  • @param i

_/ private void insertSort(int[] data, int start, int inc)

{

int temp;

for(int i=start+inc;i<data.length;i+=inc){

for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){

SortUtil.swap(data,j,j-inc);

}

}

}

}

5、快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class QuickSort implements SortUtil.Sort{

/_ (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/ public void sort(int[] data) {

quickSort(data,0,data.length-1);

}

private void quickSort(int[] data,int i,int j){

int pivotIndex=(i+j)/2;

//swap

SortUtil.swap(data,pivotIndex,j);

int k=partition(data,i-1,j,data[j]);

SortUtil.swap(data,k,j);

  • 21 -

if((k-i)>1) quickSort(data,i,k-1);

if((j-k)>1) quickSort(data,k+1,j);

}

/**

  • @param data

  • @param i

  • @param j

  • @return

_/ private int partition(int[] data, int l, int r,int pivot)

{

do{

while(data[++l]<pivot);

while((r!=0)&&data[–r]>pivot);

SortUtil.swap(data,l,r);

}

while(l<r);

SortUtil.swap(data,l,r);

return l;

}

}

6、改进后的快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ImprovedQuickSort implements SortUtil.Sort {

private static int MAX_STACK_SIZE=4096;

private static int THRESHOLD=10;

/_ (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/ public void sort(int[] data) {

int[] stack=new int[MAX_STACK_SIZE];

int top=-1;

int pivot;

int pivotIndex,l,r;

stack[++top]=0;

stack[++top]=data.length-1;

while(top>0){

int j=stack[top–];

  • 22 -

int i=stack[top–];

pivotIndex=(i+j)/2;

pivot=data[pivotIndex];

SortUtil.swap(data,pivotIndex,j);

//partition

l=i-1;

r=j;

do{

while(data[++l]<pivot);

while((r!=0)&&(data[–r]>pivot));

SortUtil.swap(data,l,r);

}

while(l<r);

SortUtil.swap(data,l,r);

SortUtil.swap(data,l,j);

if((l-i)>THRESHOLD){

stack[++top]=i;

stack[++top]=l-1;

}

if((j-l)>THRESHOLD){

stack[++top]=l+1;

stack[++top]=j;

}

}

//new InsertSort().sort(data);

insertSort(data);

}

/**

  • @param data

*/ private void insertSort(int[] data) {

int temp;

for(int i=1;i<data.length;i++){

for(int j=i;(j>0)&&(data[j]<data[j-1]);j–){

SortUtil.swap(data,j,j-1);

}

}

}

}

  • 23 -

7、归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class MergeSort implements SortUtil.Sort{

/* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])

*/ public void sort(int[] data) {

int[] temp=new int[data.length];

mergeSort(data,temp,0,data.length-1);

}

private void mergeSort(int[] data,int[] temp,int l,int r){

int mid=(l+r)/2;

if(lr) return ;

mergeSort(data,temp,l,mid);

mergeSort(data,temp,mid+1,r);

for(int i=l;i<=r;i++){

temp=data;

}

int i1=l;

int i2=mid+1;

for(int cur=l;cur<=r;cur++){

if(i1mid+1)

data[cur]=temp[i2++];

else if(i2>r)

data[cur]=temp[i1++];

else if(temp[i1]<temp[i2])

data[cur]=temp[i1++];

else

data[cur]=temp[i2++];

}

}

}

8、改进后的归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值