程序员(初级)学习宝典大全

上传人:zhuli****0000 文档编号:13754975 上传时间:2017-10-25 格式:DOC 页数:150 大小:541.50KB
返回 下载 相关 举报
程序员(初级)学习宝典大全_第1页
第1页 / 共150页
程序员(初级)学习宝典大全_第2页
第2页 / 共150页
程序员(初级)学习宝典大全_第3页
第3页 / 共150页
程序员(初级)学习宝典大全_第4页
第4页 / 共150页
程序员(初级)学习宝典大全_第5页
第5页 / 共150页
点击查看更多>>
资源描述

《程序员(初级)学习宝典大全》由会员分享,可在线阅读,更多相关《程序员(初级)学习宝典大全(150页珍藏版)》请在金锄头文库上搜索。

1、 上学吧 http:/上学吧为您提供程序员(初级)考试资料下载:http:/ 2 个领域应用最广,研究也最透。本文我将讲解排序和搜索领域最高效的两个算法:快速排序算法和二分搜索算法。教科书和很多实现库给出的这两个算法的代码非常复杂,很难理解,本文中给出的代码是最简单的实现代码,易于理解,效率也很高。缘起二分搜索算法是在我用 Flex 开发工作流编辑器时实现的。当时的需求是在 2 个图形之间画出连接线,要求根据鼠标操作来绘制,并且线段的起点和终点都是在图形的外框上。上面的描述可能比较抽象,这么说吧,原来我实现的 GUI 效果是,2 个方框,使用鼠标把它们连接起来,我绘制的线是鼠标点下和释放这 2

2、 个端点连接起来的线段。但是,这样的线段比较丑,客户要求线段的两头应该在 2 个方框的边框上。怎么解决这个问题呢?我把线段看做是排序后的点的集合,然后就可以使用二分搜索算法搜索到线段和边框的交点,然后把它们绘制出来。当时的二分搜索算法是用 ActionScript3 写的,现在我把它改成 Java 了。快速排序算法和二分搜索算法算法主要分为排序算法、搜索算法、图算法。图算法我用得不多,没有发言权,本文就不说了。排序算法中最快的是快速排序算法,搜索算法中最快的是二分搜索算法。我也最喜欢这 2 个算法。因为,它们是使用递归实现的,代码简洁清晰,效率又非常高。根据我的理解,算法的本质就是数学。根据输

3、入和设定的目标,采用有限的步骤实现输出。通常,使用计算机实现的算法,都会用到循环,这样才能发挥计算机高速运算的优势。循环和递归是等效的,这已经被科学家所证明。数学上没有循环,只有递归的概念,因此使用递归代替循环表示算法有很多好处:1, 递归的代码要比循环简洁很多,也优雅很多。2, 递归的代码可以用数学方式建模,可以从数学角度验证其正确性。很多函数式语言甚至没有循环的概念和关键字,强迫你使用递归来实现循环。如,ErLang。 上学吧 http:/上学吧为您提供程序员(初级)考试资料下载:http:/ 找到排序数组的中间元素,如果它匹配目标值,那么就返回它在数组中的索引。2, 如果没有找到,那么判

4、断中间值比目标值大还是小,如果中间值比目标值大,那么就对第一个元素到 middle-1 的元素递归这个过程。如果中间值比目标值小,那么就对 middle+1 到最后一个元素。3, 如果结束的索引小于开始的索引,返回-1,表示没有找到。4, 如果子集合有 2 个元素,那么各自比较。因为 Java 的整数除法会舍弃小数,如果数组只有 2 个元素,那么 middle 值一直都是第一个元素。经过上述的递归过程,最终将返回匹配元素的索引,或者是-1,表示找不到。二分搜索算法之所以速度快,是因为它每次可以把数组切分成两半,每次递归调用都能去除一半数据,而不用匹配每一个数据。代码:下面是代码,逻辑清楚,代码

5、简单。/* param array* param start* param end 这是最后一个元素的索引,第一次调用应该是 array.length-1* param value* return*/public static int binarySearch(int array,int start,int end,int value)int middle=(start+end)/2;if(endarraymiddle)return binarySearch(array,middle+1,end,value);else if(valueend 因为递归调用时 j+1,可能引起 j 比 end

6、还大 1。 另外如果数组是空的,或者输入错误也会出现这种情况if(end=它的元素位置互换,这样数组就分成 2 个部分,一个部分比中心值小,一个部分比中心值大。tmp=arrayj;arrayj=arrayend;arrayend=tmp;quickSort(array,start,j);quickSort(array,j+1,end);Java 的 Arrays 类也使用快速排序算法进行排序。但它的代码写得像天书一样。 上学吧 http:/上学吧为您提供程序员(初级)考试资料下载:http:/ Java 快速排序代码使用了“副作用” ,而在纯函数式语言,如Haskell,ErLang 中是没

7、有“副作用”的,也就是说变量不可以重新赋值。此时就需要返回值,每次都创建新的子数组。但函数式语言的数组处理功能很强,也会做很多性能优化,因此函数式语言实现快速排序代码更加简单,没有“副作用” ,也更加数学化。自己做的存储过程,使用了指针,并调用了外部了时间参数!基本的功能是这样的:通过在程序中选择一个时间,根据这个时间来选择符合条件的数据,并将它插入某个表。插入的时候,要进行一个判断,如果这个记录已经存在了,就不插入,不存在的话就插入该数据,这个是用游标来实现的。CURSOR acc_c IS /* 定义游标,从表中选出记录 */select from where/*原语句 a.DATE=73

8、2949 */to_date(1721425+a.DATE,J)= to_date(ParaTime,YYYY-MM-DD) and/* 将时间参数赋给选择语句*/acc_r acc_c%ROWTYPE;/* 变量 acc_r 与 acc_c 类型相同*/AmountToMove NUMBER;BEGINOPEN acc_c;LOOPFETCH acc_c INTO acc_r;EXIT WHEN acc_c%NOTFOUND; /*记录不存在时退出*/begininsert into /*记录存在时插入*/values EXCEPTION when others then null; 上学吧

9、 http:/上学吧为您提供程序员(初级)考试资料下载:http:/ LOOP ;commit;CLOSE acc_c ; /*关闭指针*/*修改表*/ update (select from(select from where/*原语句 a.DATE=732949 */to_date(1721425+a.DATE,J)= to_date(ParaTime,YYYY-MM-DD) and/*将时间参数赋给选择语句*/ where where EndDate=to_date(ParaTime,YYYY-MM-DD);/*原语句 where to_number(to_char(EndDate,J)

10、=732949+1721425;*/commit;END;自己打包 JDK 到 J2EE 服务器中第一步: 需要把 jdk 目录拷贝到 jboss 目录中比如起名叫 jdk1.5.0_06目录结构如下:jboss-4.0.3SP1-| .bin| .client| .jdk1.5.0_06| .lib| .server| .docs注意:这里是 jdk 而不是 jre 各位同仁注意了第二步:修改 run.bat 文件这里我说下自己的实现方式、一般开发自己都配置 JAVA_HOME 的但是希望给客户的时候直接打包好。但是又不希望修改用户服务器的环境(或者服务器上存在别的 j2ee 服务器以免冲突

11、)这里实现是 判断用户机器是否存在 JAVA_HOME 环境变量,如果存在则直接使用客户机上的环境(故本配置十分灵活)修改 run.bat 地方: 大家找到 在 :FOUND_RUN_JAR 和 :ADD_TOOLS 之间的代码原来为如下: 上学吧 http:/上学吧为您提供程序员(初级)考试资料下载:http:/ plaincopy to clipboardprint?if not %JAVA_HOME% = goto ADD_TOOLSset JAVA=javaecho JAVA_HOME is not set. Unexpected results may occur.echo Set

12、JAVA_HOME to the directory of your local JDK to avoid this message.goto SKIP_TOOLSif not %JAVA_HOME% = goto ADD_TOOLSset JAVA=javaecho JAVA_HOME is not set. Unexpected results may occur.echo Set JAVA_HOME to the directory of your local JDK to avoid this message.goto SKIP_TOOLS 说明:原来是判断机器是否存在%JAVA_HO

13、ME%变量 如果存在则执行 ADD_TOOLS 往下执行,如果不存在 则执行 SKIP_TOOLS 跳出命令行 打印出 echo JAVA_HOME is not set. Unexpected results may occur.echo Set JAVA_HOME to the directory of your local JDK to avoid this message. 信息,所以大家看明白的话 继续。现修改为如下view plaincopy to clipboardprint?if %JAVA_HOME% = goto CONTINUEgoto ADD_TOOLS:CONTINUEecho Could not locate %JAVA_HOME% and set %JAVA_HOME%=.jdk1.5.0.06set JAVA_HOME=.jdk1.5.0_06if %JAVA_HOME% = goto CONTINUEgoto ADD_TOOLS:CONTINUEecho Could not locate %JAVA_HOME% and set %JAVA_HOME%=.jdk1.5.0.06s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号