递归算法实现快速排序

<p>吃亏还不长记性没办法活该吃亏,就在上次笔试中遇到了让写排序算法可以根据isDesc来判断是否从小到大或者从大到小在这个过程中让我吃了大亏,按道理说这块随便写个算法就可以了但是面试官不是这样理解的,面试官要求应该是一个比较有灵魂的排序算法,比如那些比较经典的快速排序,并不是我所写的冒泡排序让我惨遭被刷。随后本人便回家开始学习一种可以拿的出手的排序算法,快速排序。<br /> 例如下面这个数组:{2,4,5,9,7,6,3,1,8}首先需要从第一个数字开始遍历,第一个数字为2,以2为支撑数X,开始从右向左遍历数组遇到比2小的变换位置即可,i是从左往右的遍历节点,j是从右往左的遍历节点,第一轮遍历如下:<br /> 支撑节点X=2:<br /> 1) 1,4,5,9,7,6,3, 2 ,8 i=0,j=7;<br /> 2) 1, 2 ,5,9,7,6,3,4,8 i=1,j=7;<br /> 这个时候你就会发现2的左边都是比它小的数,右边都是比它大的数,这时候以2为中心左边开始从新按照上面的方法来执行一次,发现2左边只有1所以不管左边,现在观察2的右边都是比他大的而且数大于一个,这时候以i+1为开始的位置,j=8依然是最后一个数字。<br /> 支撑节点X=5:<br /> 1)1, 2 ,4,9,7,6,3, 5 ,8 i=2,j=7;<br /> 2)1, 2 ,4, 5 ,7,6,3,9,8 i=3,j=7;<br /> 3)1, 2 ,4,3,7,6, 5 ,9,8 i=3,j=6;<br /> 4)1, 2 ,4,3, 5 ,6,7,9,8 i=4,j=6;<br /> 这时候第二轮已经结束;<br /> 第三轮以5为中心,左边从i=2开始到j=3结束,右边从i=5开始j=8结束一直重复以上步骤即可完成排序。<br /> Java代码如下所示:</p><br /><pre> <code class='language-Java' lang='Java'> public class QuickSoft { public void soft(Boolean isDesc, int a[], int start, int end){ if (start < end ){ int s = a[start]; int i = start; int j = end; while( i < j ){ while (i < j && (isDesc ? a[j]>=s : a[j]<=s)) //{2,4,5,9,7,6,3,1,8} j--; if (i < j && i != j) a[i++] = a[j]; while(i < j && (isDesc ? a[i] < s : a[i] > s)) i++; if (i < j && i != j) a[j--] = a[i]; } a[i] = s; soft(isDesc, a, start, i-1); soft(isDesc, a, i+1, end); } } public static void main(String[] args) { QuickSoft q = new QuickSoft(); int b[] ={2,4,5,9,7,6,3,1,8}; Boolean isDesc = false; q.soft(isDesc, b, 0, b.length-1); for (int i=0; i &lt; b.length; i++) System.out.print(a[i]); } } </code></pre>

笔试失败的动力来源于什么!

<p>每天我都在复习Java基础今天笔试一道天天见的题,我没做对,心理的惭愧不说,天天看的东西我居然没有写出来这事就equals方法的底层实现,我现在就equals方法进行一个简单的实现。</p> <p>首先equals方法是做什么的,在我的理解,它是被用来对对象进行比较,判断是否两个对象的内容是否相等,并且返回Boolean值。</p> <p>首先分析代码是如何实现的:</p> <ol start='' > <li>先对两个对象进行’==‘比较如果相同直接返回true,不同则继续使用以下方法进行比较;</li> <li>对两个对象进行instanceof 看是否属于String,如果属于在比较其长度是否相同;</li> <li>如果长度相同,在比较其每个位置对应的字符是不是相同,如果相同则返回true,否则这两个对象不同。</li> </ol> <p>下面代码是我自己改写的equals方法,仅供参考:</p> <pre><code class='language-java' lang='java'>public boolean equals(Object ojb1, Object ojb2){ if (ojb1 == ojb2){ return true; } if(ojb1 instanceof String &amp;&amp; ojb2 instanceof String){ String str1 = (String) ojb1; String str2 = (String) ojb2; int m = str1.length(); int n = str2.length(); if (m == n){ char v1[] = str1.toCharArray(); char v2[] = str2.toCharArray(); int i = 0; while( n-- != 0 ){ if (v1[i] != v2[i]) return false; i++; } return true; } } return false; } </code></pre>

Spring+SpringMVC+myBatis区别

<body><h2>1.1、Spring </h2> <p> Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。</p> <p> </p> <h2>1.2、SpringMVC <br/></h2> <p> Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。</p> <p> </p> <h2>1.3、MyBatis</h2> <p> MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。</p> </body>