﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-waysun一路阳光-随笔分类-JAVA源码</title><link>http://www.blogjava.net/1504/category/32238.html</link><description>不轻易服输,不轻言放弃.--心是梦的舞台，心有多大，舞台有多大。踏踏实实做事，认认真真做人。</description><language>zh-cn</language><lastBuildDate>Tue, 23 Mar 2010 21:37:19 GMT</lastBuildDate><pubDate>Tue, 23 Mar 2010 21:37:19 GMT</pubDate><ttl>60</ttl><item><title>Java倒计时程序【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/16/265904.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 16 Apr 2009 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/16/265904.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265904.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/16/265904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265904.html</trackback:ping><description><![CDATA[<span  style="font-family: Verdana; font-size: 13px; line-height: 19px; ">今天是北京奥运会倒计时100天，啥也不说了，就发个倒计时程序吧，值得一提的是这个程序是完全手写的代码，(日期选择控件除外)，效果如图：<br />
<img height="238" alt="" src="http://www.blogjava.net/images/blogjava_net/daizhenghenry/countdown1.jpg" width="251" border="0" /><br />
<br />
<img height="240" alt="" src="http://www.blogjava.net/images/blogjava_net/daizhenghenry/countdown2.jpg" width="248" border="0" /><br />
<br />
点击下载源代码及可执行文件<a href="http://www.blogjava.net/Files/daizhenghenry/src.rar" style="text-decoration: none; color: #666666; background-image: initial; background-repeat: initial; background-attachment: initial; background-color: transparent; background-position: initial initial; ">/Files/daizhenghenry/src.rar</a></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;">本站下载</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-16 09:51 <a href="http://www.blogjava.net/1504/archive/2009/04/16/265904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 倒计时【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/16/265903.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 16 Apr 2009 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/16/265903.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265903.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/16/265903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265903.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://haidii.javaeye.com/blog/284821最近用java编写了一个倒计时的程序，贴出来与大家共享。先看看截图吧：1.开始打开程序时的界面2.设定好时间，点击&#8220;开始计时&#8221;时的界面3.定时时间到时的界面4.退出程序时的界面5.同时，本程序具有检测功能，对您的时间输入进行检测...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/16/265903.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-16 09:50 <a href="http://www.blogjava.net/1504/archive/2009/04/16/265903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JGA 【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265882.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265882.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265882.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265882.html</trackback:ping><description><![CDATA[<a href="http://hi.baidu.com/litertiger/blog/item/3798546625f86224aa184c30.html">http://hi.baidu.com/litertiger/blog/item/3798546625f86224aa184c30.html</a>
<div><span  style="color: #333333; font-family: Arial; font-size: 14px; line-height: 20px; ">
<p style="line-height: normal; ">书上给的的一个算法,实现了一下</p>
<p style="line-height: normal; ">无约束条件 max f(x1,x2)=21.5+x1*sin(4*pi*x1)+x2sin(20*pi*x2)</p>
<p style="line-height: normal; ">-3.0&lt;x1&lt;12.1</p>
<p style="line-height: normal; ">4.1&lt;x2&lt;5.8</p>
<p style="line-height: normal; ">1%的变异</p>
<p style="line-height: normal; ">25%交叉</p>
<p style="line-height: normal; ">旋转转轮选择</p>
<p style="line-height: normal; ">/**<br style="line-height: normal; " />
&#160;* 实现Michalewicz<br style="line-height: normal; " />
&#160;*&#160;<br style="line-height: normal; " />
&#160;* @author not attributable<br style="line-height: normal; " />
&#160;* @version 1.0<br style="line-height: normal; " />
&#160;*/</p>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">public class JGA {</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;bestindival bd = null;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String[] ipop = new String[10];</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;int gernation = 0;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public JGA() {<br style="line-height: normal; " />
&#160;&#160;this.ipop = inialPops();<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;double calculatefitnessvalue(String str) { // str为染色体，前面18个为x1表示部分，后面15个为x2表示部分<br style="line-height: normal; " />
&#160;&#160;String str1 = str.substring(0, 18);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(str1);<br style="line-height: normal; " />
&#160;&#160;String str2 = str.substring(18);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(str2);<br style="line-height: normal; " />
&#160;&#160;int b1 = Integer.parseInt(str1, 2);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(b1);<br style="line-height: normal; " />
&#160;&#160;int b2 = Integer.parseInt(str2, 2);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(b2);<br style="line-height: normal; " />
&#160;&#160;double x1 = -3.0 + b1 * (12.1 - (-3.0)) / (Math.pow(2, 18) - 1);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(x1);<br style="line-height: normal; " />
&#160;&#160;double x2 = 4.1 + b2 * (5.8 - 4.1) / (Math.pow(2, 15) - 1);<br style="line-height: normal; " />
&#160;&#160;// System.out.println(x2);<br style="line-height: normal; " />
&#160;&#160;double fitness = 21.5 + x1 * Math.sin(4 * 3.1415926 * x1) + x2<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;* Math.sin(20 * 3.1415926 * x2);<br style="line-height: normal; " />
&#160;&#160;//System.out.println("eval=f(" + x1 + "," + x2 + ")=" + fitness);<br style="line-height: normal; " />
&#160;&#160;return fitness;<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String inialPop() { // 初始化10个字符串<br style="line-height: normal; " />
&#160;&#160;String res = "";<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 33; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;if (Math.random() > 0.5) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;res += "0";<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;res += "1";<br style="line-height: normal; " />
&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;return res;<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;String[] inialPops() {<br style="line-height: normal; " />
&#160;&#160;String[] ipop = new String[10];<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;ipop[i] = inialPop();<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;return ipop;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void select() {<br style="line-height: normal; " />
&#160;&#160;double evals[] = new double[10];// 所有染色体适应值<br style="line-height: normal; " />
&#160;&#160;double p[] = new double[10];// 各染色体选择概率<br style="line-height: normal; " />
&#160;&#160;double q[] = new double[10];// 累计概率<br style="line-height: normal; " />
&#160;&#160;double F = 0;<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;evals[i] = calculatefitnessvalue(ipop[i]);<br style="line-height: normal; " />
&#160;&#160;&#160;if (bd == null) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd = new bestindival();<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.fitness = evals[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.generations = 0;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;bd.str = ipop[i];<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (evals[i] > bd.fitness)// 最好的记录下来<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;{<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.fitness = evals[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.generations = gernation;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;bd.str = ipop[i];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;F = F + evals[i];// 所有染色体适应值总和</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;p[i] = evals[i] / F;<br style="line-height: normal; " />
&#160;&#160;&#160;if (i == 0)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;q[i] = p[i];<br style="line-height: normal; " />
&#160;&#160;&#160;else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;q[i] = q[i - 1] + p[i];<br style="line-height: normal; " />
&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;double r = Math.random();<br style="line-height: normal; " />
&#160;&#160;&#160;if (r &lt;= q[0]) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[i] = ipop[0];</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;for (int j = 1; j &lt; 10; j++) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (r &lt; q[j]) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;ipop[i] = ipop[j];<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;break;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void cross() { // 交叉率为25%，平均为25%的染色体进行交叉<br style="line-height: normal; " />
&#160;&#160;String temp1, temp2;<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 10; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;if (Math.random() &lt; 0.25) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;double r = Math.random();<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;int pos = (int) (Math.round(r * 1000)) % 33;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (pos == 0) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;pos = 1;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;temp1 = ipop[i].substring(0, pos)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[(i + 1) % 10].substring(pos);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;temp2 = ipop[(i + 1) % 10].substring(0, pos)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[i].substring(pos);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[i] = temp1;<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;ipop[(i + 1) / 10] = temp2;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;void mutation() {<br style="line-height: normal; " />
&#160;&#160;// 1%基因变异m*pop_size 共330个基因，为了使每个基因都相投机会发生变异，需要产生[1--330]上均匀分布的<br style="line-height: normal; " />
&#160;&#160;for (int i = 0; i &lt; 4; i++) {<br style="line-height: normal; " />
&#160;&#160;&#160;int num = (int) (Math.random() * 330 + 1);<br style="line-height: normal; " />
&#160;&#160;&#160;int chromosomeNum = (int) (num / 33) + 1; // 染色体号<br style="line-height: normal; " />
&#160;&#160;&#160;int mutationNum = num - (chromosomeNum - 1) * 33; // 基因号<br style="line-height: normal; " />
&#160;&#160;&#160;if (mutationNum == 0)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;mutationNum = 1;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println(num + "," + chromosomeNum + "," + mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;chromosomeNum = chromosomeNum - 1;<br style="line-height: normal; " />
&#160;&#160;&#160;if(chromosomeNum>=10)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;chromosomeNum=9;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println("变异前" + ipop[chromosomeNum]);<br style="line-height: normal; " />
&#160;&#160;&#160;String temp;<br style="line-height: normal; " />
&#160;&#160;&#160;if (ipop[chromosomeNum].charAt(mutationNum - 1) == '0') {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (mutationNum == 1) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;temp = "1" + ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (mutationNum != 33) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1"<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1";<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;if (mutationNum == 1) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;temp = "0" + ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;if (mutationNum != 33) {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "0"<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ ipop[chromosomeNum].substring(mutationNum);<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;} else {<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;temp = ipop[chromosomeNum]<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.substring(0, mutationNum - 1)<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;+ "1";<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;&#160;ipop[chromosomeNum] = temp;<br style="line-height: normal; " />
&#160;&#160;&#160;//System.out.println("变异后" + ipop[chromosomeNum]);</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}<br style="line-height: normal; " />
&#160;<br style="line-height: normal; " />
&#160;void process()<br style="line-height: normal; " />
&#160;{<br style="line-height: normal; " />
&#160;&#160;for(int i=0;i&lt;1000000;i++)<br style="line-height: normal; " />
&#160;&#160;{<br style="line-height: normal; " />
&#160;&#160;&#160;select();<br style="line-height: normal; " />
&#160;&#160;&#160;cross();<br style="line-height: normal; " />
&#160;&#160;&#160;mutation();<br style="line-height: normal; " />
&#160;&#160;&#160;gernation=i;<br style="line-height: normal; " />
&#160;&#160;&#160;<br style="line-height: normal; " />
&#160;&#160;}<br style="line-height: normal; " />
&#160;&#160;System.out.println("最优值"+bd.fitness+",代数"+bd.generations);<br style="line-height: normal; " />
&#160;}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public static void main(String args[]) {<br style="line-height: normal; " />
&#160;&#160;JGA j = new JGA();<br style="line-height: normal; " />
&#160;&#160;// System.out.println(j.calculatefitnessvalue("000001010100101001101111011111110"));<br style="line-height: normal; " />
&#160;&#160;j.process();</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;}<br style="line-height: normal; " />
}</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">class bestindival { // 存储最佳的<br style="line-height: normal; " />
&#160;public int generations;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public String str;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;public double fitness;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">&#160;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; ">}<br style="line-height: normal; " />
</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; "></font>&#160;</div>
<div align="left" style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; "><hr size="2" style="width: 122px; height: 2px; line-height: normal; " />
</font></div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font color="#c0c0c0" style="line-height: normal; "><font size="2" style="line-height: normal; ">litertiger</font></font></div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; filter: none; font-size: 12px; line-height: normal; "><font size="2" style="line-height: normal; ">2006-12-09</font></div>
</span></div>
<img src ="http://www.blogjava.net/1504/aggbug/265882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 23:19 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蚁群算法java实现[收藏]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265878.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265878.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265878.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265878.html</trackback:ping><description><![CDATA[<div>http://qzone.qq.com/blog/5128646-1214662948</div>
import java.io.File; <br />
import static java.lang.Math.pow; <br />
import static
java.lang.Math.sqrt; <br />
import static java.lang.Math.random; <br />
import
java.util.HashMap; <br />
import java.io.FileReader; <br />
import
java.io.BufferedReader; <br />
/** <br />
* <br />
* @author dvdface <br />
*/
<br />
<br />
public class ACOforTSP { <br />
<br />
<br />
//城市的距离表 <br />
private double[][]
distance; <br />
//距离的倒数表 <br />
private double[][] heuristic; <br />
//启发信息表 <br />
private
double[][] pheromone; <br />
//权重 <br />
private int alpha, beta; <br />
//迭代的次数
<br />
private int iterationTimes; <br />
//蚂蚁的数量 <br />
private int numbersOfAnt;
<br />
//蒸发率 <br />
private double rate; <br />
<br />
ACOforTSP (String file, int
iterationTimes, int numbersOfAnt, int alpha, int beta, double rate) {
<br />
<br />
//加载文件 <br />
this.initializeData(file); <br />
//初始化参数
<br />
this.iterationTimes = iterationTimes; <br />
//设置蚂蚁数量 <br />
this.numbersOfAnt =
numbersOfAnt; <br />
//设置权重 <br />
this.alpha = alpha; <br />
this.beta = beta;
<br />
//设置蒸发率 <br />
this.rate = rate; <br />
} <br />
<br />
private void
initializeData(String filename) { <br />
<br />
//定义内部类 <br />
class City { <br />
<br />
int
no; <br />
double x; <br />
double y; <br />
<br />
City(int no, double x, double y) {
<br />
<br />
this.no = no; <br />
this.x = x; <br />
this.y = y; <br />
} <br />
<br />
private
double getDistance(City city) { <br />
<br />
return sqrt(pow((x - city.x), 2) +
pow((y - city.y), 2)); <br />
} <br />
} <br />
<br />
try { <br />
//定义HashMap保存读取的坐标信息
<br />
HashMap&lt;Integer, City> map = new HashMap&lt;Integer, City>();
<br />
//读取文件 <br />
BufferedReader reader = new BufferedReader(new FileReader(new
File(filename))); <br />
for (String str = reader.readLine(); str != null; str =
reader.readLine()) { <br />
//将读到的信息保存入HashMap <br />
if
(str.matches("([0-9]+)(\\s*)([0-9]+)(.?)([0-9]*)(\\s*)([0-9]+)(.?)([0-9]*)")) {
<br />
<br />
String[] data = str.split("(\\s+)"); <br />
City city = new
City(Integer.parseInt(data[0]), <br />
Double.parseDouble(data[1]),
<br />
Double.parseDouble(data[2])); <br />
<br />
map.put(city.no, city); <br />
} <br />
}
<br />
//分配距离矩阵存储空间 <br />
distance = new double[map.size() + 1][map.size() + 1];
<br />
//分配距离倒数矩阵存储空间 <br />
heuristic = new double[map.size() + 1][map.size() + 1];
<br />
//分配信息素矩阵存储空间 <br />
pheromone = new double[map.size() + 1][map.size() + 1];
<br />
for (int i = 1; i &lt; map.size() + 1; i++) { <br />
for (int j = 1; j &lt;
map.size() + 1; j++) { <br />
//计算城市间的距离，并存入距离矩阵 <br />
distance<em><wbr>[j] =
map.get(i).getDistance(map.get(j)); <br />
//计算距离倒数，并存入距离倒数矩阵
<br />
heuristic<em><wbr>[j] = 1 / distance<em><wbr>[j]; <br />
//初始化信息素矩阵
<br />
pheromone<em><wbr>[j] = 1; <br />
} <br />
} <br />
<br />
} catch (Exception exception)
{ <br />
<br />
System.out.println("初始化数据失败！"); <br />
} <br />
} <br />
<br />
class Ant {
<br />
<br />
//已访问城市列表 <br />
private boolean[] visited; <br />
//访问顺序表 <br />
private int[]
tour; <br />
//已访问城市的个数 <br />
private int n; <br />
//总的距离 <br />
private double total;
<br />
<br />
Ant() { <br />
//给访问顺序表分配空间 <br />
tour = new int[distance.length+1];
<br />
//已存入城市数量为n，刚开始为0 <br />
n = 0; <br />
//将起始城市1,放入访问结点顺序表第一项 <br />
tour[++n] = 1;
<br />
//给已访问城市结点分配空间 <br />
visited = new boolean[distance.length];
<br />
//第一个城市为出发城市，设置为已访问 <br />
visited[tour[n]] = true; <br />
} <br />
<br />
private int
chooseCity() { <br />
<br />
//用来random的随机数 <br />
double m = 0;
<br />
//获得当前所在的城市号放入j,如果和j相邻的城市没有被访问，那么加入m <br />
for (int i = 1, j = tour[n]; i &lt;
pheromone.length; i++) { <br />
<br />
if (!visited<em><wbr>) { <br />
m +=
pow(pheromone[j]<em><wbr>, alpha) * pow(heuristic[j]<em><wbr>, beta); <br />
} <br />
}
<br />
<br />
//保存随机到的数 <br />
double p = m * random(); <br />
//寻找被随机到的城市 <br />
double k = 0;
<br />
//保存找到的城市 <br />
int q = 0; <br />
for (int i = 1, j = tour[n]; k &lt; p; i++) {
<br />
<br />
if (!visited<em><wbr>) { <br />
<br />
k += pow(pheromone[j]<em><wbr>, alpha) *
pow(heuristic[j]<em><wbr>, beta); <br />
q = i; <br />
} <br />
} <br />
<br />
return q; <br />
}
<br />
<br />
private void constructSolution () { <br />
<br />
while (n !=
(distance.length-1) ) { <br />
<br />
//选取下一个城市 <br />
int p = chooseCity(); <br />
//计算总的距离
<br />
total += distance[tour[n]][p]; <br />
//将选取到的城市放入已访问列表 <br />
tour[++n] = p;
<br />
//将选取到的城市标记为已访问 <br />
visited[p] = true; <br />
} <br />
<br />
//回到起点 <br />
total +=
distance[tour[1]][tour[n]]; <br />
//将起点加入访问顺序表的最后 <br />
tour[++n] = tour[1]; <br />
}
<br />
<br />
private void releasePheromone() { <br />
<br />
//释放信息素的大小 <br />
double t =
1/total; <br />
//释放信息素 <br />
for (int i=1;i&lt;tour.length-1;i++) {
<br />
<br />
pheromone[tour<em><wbr>][tour[i+1]] += t;
<br />
pheromone[tour[i+1]][tour<em><wbr>] += t; <br />
} <br />
} <br />
<br />
}
<br />
<br />
public void go() { <br />
<br />
//保存最好的路径和路径长度 <br />
double bestTotal =
Double.MAX_VALUE; <br />
int[] bestTour = new int[distance.length+1];
<br />
<br />
//新建蚂蚁数组，用来引用所创建的蚂蚁 <br />
Ant[] ant = new Ant[numbersOfAnt];
<br />
<br />
//进行iterationTimes次迭代 <br />
while (iterationTimes != 0) {
<br />
//初始化新的一批蚂蚁（这里用构造新的蚂蚁代替重置蚂蚁状态） <br />
for (int i=0; i&lt;numbersOfAnt; i++) {
<br />
ant<em><wbr> = new Ant(); <br />
} <br />
<br />
//进行一次迭代（即让所有的蚂蚁构建一条路径） <br />
for (int
i=0; i&lt;numbersOfAnt; i++) { <br />
<br />
ant<em><wbr>.constructSolution();
<br />
//如果蚂蚁构建的路径长度比上次最好的还好，那么保存这个长度和它所走的路径 <br />
if
(ant<em><wbr>.total&lt;bestTotal) { <br />
<br />
bestTotal = ant<em><wbr>.total;
<br />
System.arraycopy(ant<em><wbr>.tour, 1, bestTour, 1, bestTour.length-1); <br />
}
<br />
} <br />
<br />
//蒸发信息素 <br />
evaporatePheromone(); <br />
<br />
//释放信息素 <br />
for (int
i=0; i&lt;numbersOfAnt; i++) { <br />
<br />
ant<em><wbr>.releasePheromone(); <br />
}
<br />
<br />
//报告本次迭代的信息
<br />
System.out.format("本次为倒数第%d次迭代,当前最优路径长度为%10.2f\n",iterationTimes,bestTotal);
<br />
<br />
//迭代总数减去1，进行下次迭代 <br />
iterationTimes--; <br />
} <br />
<br />
//输出最好的路径长度
<br />
System.out.format("得到的最优的路径长度为:%10.2f\n",bestTotal); <br />
//输出最好的路径
<br />
System.out.println("最优路径如下："); <br />
for (int i=1; i&lt;bestTour.length; i++)
{ <br />
<br />
System.out.print("&#8594;"+bestTour<em><wbr>); <br />
} <br />
} <br />
<br />
private
void evaporatePheromone() { <br />
<br />
for (int i = 1; i &lt; pheromone.length;
i++) <br />
for (int j = 1; j &lt; pheromone.length; j++) {
<br />
<br />
pheromone<em><wbr>[j] *= 1-rate; <br />
} <br />
<br />
} <br />
}</em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em>
<div><em>1.new一个对象 <br />
ACOforTSP tsp = new
ACPforTSP(tsp数据文件名,迭代次数，蚂蚁数量，信息素权重，路径权重，信息素蒸发率）; <br />
2.用go()方法运行 <br />
tsp.go();
<br />
<br />
ACOforTSP.java</em></div>
<img src ="http://www.blogjava.net/1504/aggbug/265878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 23:12 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法的Java实现例子以及测试分析【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265872.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265872.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265872.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265872.html</trackback:ping><description><![CDATA[<span  style="color: #2a2a2a; font-family: Tahoma; font-size: 14px; line-height: 25px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">背景简介：KMP算法用来处理字符串匹配的。给你A,B两个字符串，检查B串是否是A串的子串，类似于Java的String.indexOf("")。之所以叫做KMP，是因为这个算法是由Knuth、Morris、Pratt三个提出来的，取了这三个人的名字的头一个字母。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">原理介绍：找到匹配失败时的最合适的回退位置，而不是简单的回退到子串的第一个字符（常规的枚举查找方式，是简单的回退到子串的第一个字符，接下来准备写一篇KMP算法的性能分析Java实现实例），即可提高查找的效率。因此为了找到这个合适的位置，先对子串预处理，从而得到一个回退位置的数组。过多的理论就不介绍了。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">总体而言比较简单，KMP算一个经典的算法例子，很多笔试、面试也会问起。现总结一下，放在这里供大家参考、交流，希望对大家有所帮助，下面直接给出实现例子，测试与分析也包含其中。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">一、一个文件源代码</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">KMP.java</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">源代码为：</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">package algorithm.kmp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">/**<br />
* KMP算法的Java实现例子与测试、分析<br />
* @author 崔卫兵<br />
* @date 2009-3-25<br />
*/<br />
public class KMP {<br />
/**<br />
* 对子串加以预处理，从而找到匹配失败时子串回退的位置<br />
* 找到匹配失败时的最合适的回退位置，而不是回退到子串的第一个字符，即可提高查找的效率<br />
* 因此为了找到这个合适的位置，先对子串预处理，从而得到一个回退位置的数组<br />
* @param B，待查找子串的char数组<br />
* @return<br />
*/<br />
public static int[] preProcess(char [] B) {<br />
int size = B.length;<br />
int[] P = new int[size];<br />
P[0]=0;<br />
int j=0;<br />
//每循环一次，就会找到一个回退位置<br />
for(int i=1;i<size;i++){><br />
//当找到第一个匹配的字符时，即j>0时才会执行这个循环<br />
//或者说p2中的j++会在p1之前执行（限于第一次执行的条件下）<br />
//p1<br />
while(j>0 %26amp;%26amp; B[j]!=B[i]){<br />
j=P[j];<br />
}<br />
//p2，由此可以看出，只有当子串中含有重复字符时，回退的位置才会被优化<br />
if(B[j]==B[i]){<br />
j++;<br />
}<br />
//找到一个回退位置j，把其放入P[i]中<br />
P[i]=j;<br />
}<br />
return P;<br />
}<br />
<br />
/**<br />
* KMP实现<br />
* @param parStr<br />
* @param subStr<br />
* @return<br />
*/<br />
public static void kmp(String parStr, String subStr) {<br />
int subSize = subStr.length();<br />
int parSize = parStr.length();<br />
char[] B = subStr.toCharArray();<br />
char[] A = parStr.toCharArray();<br />
int[] P = preProcess(B);<br />
int j=0;<br />
int k =0;<br />
for(int i=0;i
<parsize;i++){><br />
//当找到第一个匹配的字符时，即j>0时才会执行这个循环<br />
//或者说p2中的j++会在p1之前执行（限于第一次执行的条件下）<br />
//p1<br />
while(j>0 %26amp;%26amp; B[j]!=A[i]){<br />
//找到合适的回退位置<br />
j=P[j-1];<br />
}<br />
//p2 找到一个匹配的字符<br />
if(B[j]==A[i]){<br />
j++;<br />
}<br />
//输出匹配结果，并且让比较继续下去<br />
if(j==subSize){<br />
j=P[j-1];<br />
k++;<br />
System.out.printf("Find subString '%s' at %d\n",subStr,i-subSize+1);<br />
}<br />
}<br />
System.out.printf("Totally found %d times for '%s'.\n\n",k,subStr);<br />
}<br />
<br />
public static void main(String[] args) {<br />
//回退位置数组为P[0, 0, 0, 0, 0, 0]<br />
kmp("abcdeg, abcdeh, abcdef!这个会匹配1次","abcdef");<br />
//回退位置数组为P[0, 0, 1, 2, 3, 4]<br />
kmp("Test ititi ititit! Test ititit!这个会匹配2次","ititit");<br />
//回退位置数组为P[0, 0, 0]<br />
kmp("测试汉字的匹配，崔卫兵。这个会匹配1次","崔卫兵");<br />
//回退位置数组为P[0, 0, 0, 1, 2, 3, 4, 5, 6]<br />
kmp("这个会匹配0次","it1it1it1");<br />
}<br />
}</parsize;i++){>
</size;i++){></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">二、输出结果</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString 'abcdef' at 16<br />
Totally found 1 times for 'abcdef'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString 'ititit' at 11<br />
Find subString 'ititit' at 24<br />
Totally found 2 times for 'ititit'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Find subString '崔卫兵' at 8<br />
Totally found 1 times for '崔卫兵'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">Totally found 0 times for 'it1it1it1'.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">三、总结</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">总体而言，KMP算法通过找到合适的回退位置从而可以提高匹配效率，但是如果匹配位置都是第一个字符呢？例如测试代码中的</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">//回退位置数组为P[0, 0, 0, 0, 0, 0]<br />
kmp("abcdeg, abcdeh, abcdef!这个会匹配2次","abcdef");</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: normal; font-style: normal; font-size: 100%; font-family: inherit; text-indent: 2em; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; ">接下来准备写一篇KMP算法的性能分析Java实现实例，下文再见。^_^</p>
<div style="text-indent: 28px;"><br />
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:56 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java实现RSA算法【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265871.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265871.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265871.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265871.html</trackback:ping><description><![CDATA[<a href="http://developer.51cto.com/art/200612/36279.htm">http://developer.51cto.com/art/200612/36279.htm</a>
<div><span  style="font-family: 宋体; font-size: 12px; ">
<div class="m_l_cont_note1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-style: initial; border-color: initial; border-left-color: #d3d3d3; background-color: #ffffff; padding-top: 6px; padding-right: 12px; padding-bottom: 4px; padding-left: 12px; line-height: 24px; color: #006600; ">
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; ">
    <li style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; background-position: 0% 50%; "><span class="fa" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 12px; color: #cc0000; ">摘要：</span>本文先介绍RSA算法的原理,然后在Eclipse的开发环境下,用JAVA编程语言实现，并给出了源代码。</li>
    <li style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; background-position: 0% 50%; "><span class="fa" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 12px; color: #cc0000; ">标签：</span><a href="http://www.51cto.com/php/search.php?keyword=Java" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">Java</a>&#160;&#160;<a href="http://www.51cto.com/php/search.php?keyword=RSA" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">RSA</a>&#160;&#160;<a href="http://www.51cto.com/php/search.php?keyword=%CB%E3%B7%A8" target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">算法</a></li>
    <li class="m_l_cont_note1_r" style="background-image: url(http://www.51cto.com/images/art/images/dt.gif); background-repeat: no-repeat; background-attachment: initial; background-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; text-align: right; background-position: 0% 50%; ">
    <div align="right" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; "><a href="http://ad.cn.doubleclick.net/clk;202930372;27012168;u" target="_blank" class="font_a" style="font-size: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; outline-style: none; color: #0e60ac; text-decoration: underline; ">Oracle帮您准确洞察各个物流环节</a></div>
    </li>
</ul>
</div>
<div class="m_l_cont_text" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-style: initial; border-color: initial; font-size: 14px; line-height: 26px; padding-top: 6px; padding-right: 0px; padding-bottom: 6px; padding-left: 0px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1、RSA算法的原理</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1.1原理</strong><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
假设我们需要将信息从机器A传到机器B，首先由机器B随机确定一个Key，我们称之为密匙private_key，将这个可KEY始终保存在机器B中而不发出来；然后，由这个private_key计算出另一个Key，我们称之为公匙Public_key。这个Public_key的特性是几乎不可能通过该Key计算生成它的private_key。接下来通过网络把这个Public_key传给机器A，机器A受到Public_key后，利用该key，将信息加密，并把加密后的信息通过网络发送到机器B，最后机器B利用已知的private_key，就可以解开加密信息。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1.2步骤</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">RSA算法的安全性依赖于大数因数分解的困难性。公匙和私匙都是两个大素数的函数。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">1.2.1首先选择两个大素数p、q,计算n=p*q; m=(p-1)*(q-1);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.2而后随机选择加密密匙Public_key，要求和m互质，比如Public_key=m-1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.3利用欧几里德算法计算解密密匙private_key，使private_key满足</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <td class="code" bgcolor="#e6e6e6" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
            <pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">Public_key*private_key三1(mod m)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">其中Public_key，n是公匙，private_key是密匙。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.4加密信息text时，利用公式secretword=text^Public_key (mod n)得到密文secretword。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
1.2.5解密时利用公式word=text^private_key(mod n)得到原文word=text。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2、程序</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">本算法用JAVA编程语言实现，开发环境为Eclipse。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "></p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <td class="code" bgcolor="#e6e6e6" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; ">
            <pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">//BJTU 软件0404&#160; <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            import java.io.*;</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">public class Rsa <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private int p=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private int q=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long n=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long m=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long public_key=0;//公匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long private_key=0;//密匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long text=0;//明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long secretword=0;//密文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            private long word=0;//解密后明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //判断是否为素数<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public boolean primenumber(long t)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long k=0;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            k=(long)Math.sqrt((double)t);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            boolean flag=true;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            outer:for(int i=2;i&lt;=k;i++)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if((t%i)==0)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            flag = false;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            break outer;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return flag;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入PQ<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void inputPQ()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入素数p: ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.p=Integer.parseInt(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            while(!primenumber(this.p));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入素数q: ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.q=Integer.parseInt(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            while(!primenumber(this.q));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.n=this.p*this.q;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.m=(p-1)*(q-1);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("这两个素数的乘积为p*q："+this.n);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("所得的小于Ｎ并且与Ｎ互素的整数的个数为m=(p-1)(q-1)</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">："+this.m);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //求最大公约数<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public long gcd(long a,long b)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long gcd;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if(b==0)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            gcd=a;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            else<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            gcd=gcd(b,a%b);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("gcd:"+gcd);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return gcd;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入公匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getPublic_key()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            do{<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入一个公钥的值，这个值要求小于m并且和m互质</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">： ");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.public_key=Long.parseLong(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }while((this.public_key >= this.m) || (this.gcd</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(this.m,this.public_key)!=1));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("公钥为："+this.public_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //计算得到密匙<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getPrivate_key()<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long value=1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            outer:for(long i=1;;i++)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            value=i*this.m+1;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("value:&#160; "+value);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if((value%this.public_key==0)&amp;&amp; (value/this.public_key &lt; this.m))<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.private_key=value/this.public_key;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            break outer;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("产生的一个私钥为："+this.private_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //输入明文<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void getText()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("请输入明文：");<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            BufferedReader stdin=new BufferedReader(new InputStreamReader</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">(System.in));<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            String br=stdin.readLine();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.text=Long.parseLong(br);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密、解密计算<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public long colum(long y,long n,long key)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            long mul;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            if(key==1)<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            mul=y%n;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            else <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            mul=y*this.colum(y,n,key-1)%n;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            return mul;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密后解密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public void pascolum()throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.getText();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("输入明文为: "+this.text);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //加密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.secretword=this.colum(this.text,this.n,this.public_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("所得的密文为："+this.secretword);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            //解密<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            this.word=this.colum(this.secretword,this.n,this.private_key);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            System.out.println("解密后所得的明文为："+this.word);<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            <br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            public static void main(String []args)throws Exception<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            {<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            Rsa t = new Rsa();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.inputPQ();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.getPublic_key();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.getPrivate_key();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            t.pascolum();<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
            }</p>
            <p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">}</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3、试验介绍</strong></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">2.1输入PQ，计算m、n&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
3.2输入公匙，产生密匙&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
3.3输入明文，产生密文，并解密</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-indent: 28px; ">此处时间限制，明文暂时用个数字代替，有兴趣的可以改变程序，变成一段数字。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入素数p：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
23<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入素数q：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
29<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
这两个素数的乘积为p*q：667<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
所得的小于N并且与N互素的整数的个数为m=(p-1)(q-1)：616<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入一个公钥的值，这个值要求小于m并且和m互质：&#160;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
611<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
gcd：1<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
公钥为：611<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
产生的一个私钥为：123<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
请输入明文：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
311<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
输入明文为: 311<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
所得的密文为：653<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
解密后所得的明文为：311</p>
</div>
</span></div>
<img src ="http://www.blogjava.net/1504/aggbug/265871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:47 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小二乘法拟合java实现源程序【原创 】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265869.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:28:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265869.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265869.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265869.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">因为我所在的项目要用到最小二乘法拟合，所有我抽时间将C++实现的程序改为JAVA实现，现在贴出来，供大家参考使用。<br />
<font size="3">/**<br />
&#160;* &lt;p>函数功能：最小二乘法曲线拟合&lt;/p><br />
&#160;* @param x 实型一维数组，长度为 n 。存放给定 n 个数据点的　X　坐标<br />
&#160;* @param y 实型一维数组，长度为 n 。存放给定 n 个数据点的　Y　坐标<br />
&#160;* @param n 变量。给定数据点的个数<br />
&#160;* @param a 实型一维数组，长度为 m 。返回 m-1　次拟合多项式的 m 个系数<br />
&#160;* @param m 拟合多项式的项数，即拟合多项式的最高次数为 m-1.<br />
&#160;*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 要求 m&lt;=n 且m&lt;=20。若 m>n 或 m>20 ，则本函数自动按 m=min{n,20} 处理.<br />
&#160;* &lt;p>Date:2007-12-25 16:21 PM&lt;/p><br />
&#160;* @author qingbao-gao<br />
&#160;* @return&#160;<br />
&#160;*/<br />
&#160;public static double[] PolyFit(double x[], double y[], int n, double a[], int m)<br />
&#160;{<br />
&#160;&#160;int i, j, k;<br />
&#160;&#160;double z, p, c, g, q = 0, d1, d2;&#160;<br />
&#160;&#160;double []s=new double[20];<br />
&#160;&#160;double []t=new double[20];<br />
&#160;&#160;double[] b=new double[20];<br />
&#160;&#160;double[]dt=new double[3];<br />
&#160;&#160;for (i = 0; i &lt;= m-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;a[i] = 0.0;<br />
&#160;&#160;}<br />
&#160;&#160;if (m > n)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;m = n;<br />
&#160;&#160;}<br />
&#160;&#160;if (m > 20)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;m = 20;<br />
&#160;&#160;}<br />
&#160;&#160;z = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;z = z+x[i]/(1.0 *n);<br />
&#160;&#160;}<br />
&#160;&#160;b[0] = 1.0;<br />
&#160;&#160;d1 = 1.0 * n;<br />
&#160;&#160;p = 0.0;<br />
&#160;&#160;c = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;p = p+(x[i]-z);<br />
&#160;&#160;&#160;c = c+y[i];<br />
&#160;&#160;}<br />
&#160;&#160;c = c/d1;<br />
&#160;&#160;p = p/d1;<br />
&#160;&#160;a[0] = c * b[0];<br />
&#160;&#160;if (m > 1)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;t[1] = 1.0;<br />
&#160;&#160;&#160;t[0] = -p;<br />
&#160;&#160;&#160;d2 = 0.0;<br />
&#160;&#160;&#160;c = 0.0;<br />
&#160;&#160;&#160;g = 0.0;<br />
&#160;&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = x[i]-z-p;<br />
&#160;&#160;&#160;&#160;d2 = d2+q * q;<br />
&#160;&#160;&#160;&#160;c = c+y[i] *q;<br />
&#160;&#160;&#160;&#160;g = g+(x[i]-z) *q * q;<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;c = c/d2;<br />
&#160;&#160;&#160;p = g/d2;<br />
&#160;&#160;&#160;q = d2/d1;<br />
&#160;&#160;&#160;d1 = d2;<br />
&#160;&#160;&#160;a[1] = c * t[1];<br />
&#160;&#160;&#160;a[0] = c * t[0]+a[0];<br />
&#160;&#160;}<br />
&#160;&#160;for (j = 2; j &lt;= m-1; j++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;s[j] = t[j-1];<br />
&#160;&#160;&#160;s[j-1] = -p * t[j-1]+t[j-2];<br />
&#160;&#160;&#160;if (j >= 3)<br />
&#160;&#160;&#160;&#160;for (k = j-2; k >= 1; k--)<br />
&#160;&#160;&#160;&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;s[k] = -p * t[k]+t[k-1]-q * b[k];<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;s[0] = -p * t[0]-q * b[0];<br />
&#160;&#160;&#160;d2 = 0.0;<br />
&#160;&#160;&#160;c = 0.0;<br />
&#160;&#160;&#160;g = 0.0;<br />
&#160;&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = s[j];<br />
&#160;&#160;&#160;&#160;for (k = j-1; k >= 0; k--)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;q = q *(x[i]-z)+s[k];<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;d2 = d2+q * q;<br />
&#160;&#160;&#160;&#160;c = c+y[i] *q;<br />
&#160;&#160;&#160;&#160;g = g+(x[i]-z) *q * q;<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;c = c/d2;<br />
&#160;&#160;&#160;p = g/d2;<br />
&#160;&#160;&#160;q = d2/d1;<br />
&#160;&#160;&#160;d1 = d2;<br />
&#160;&#160;&#160;a[j] = c * s[j];<br />
&#160;&#160;&#160;t[j] = s[j];<br />
&#160;&#160;&#160;for (k = j-1; k >= 0; k--)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;a[k] = c * s[k]+a[k];<br />
&#160;&#160;&#160;&#160;b[k] = t[k];<br />
&#160;&#160;&#160;&#160;t[k] = s[k];<br />
&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;dt[0] = 0.0;<br />
&#160;&#160;dt[1] = 0.0;<br />
&#160;&#160;dt[2] = 0.0;<br />
&#160;&#160;for (i = 0; i &lt;= n-1; i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;q = a[m-1];<br />
&#160;&#160;&#160;for (k = m-2; k >= 0; k--)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;q = a[k]+q *(x[i]-z);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;p = q-y[i];<br />
&#160;&#160;&#160;if (Math.abs(p) > dt[2])<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;dt[2] = Math.abs(p);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;dt[0] = dt[0]+p * p;<br />
&#160;&#160;&#160;dt[1] = dt[1]+Math.abs(p);<br />
&#160;&#160;}<br />
&#160;&#160;return a;<br />
&#160;}<br />
<font size="3">/**<br />
&#160; * &lt;p>对X轴数据节点球平均值&lt;/p><br />
&#160; * @param x 存储X轴节点的数组<br />
&#160; * &lt;p>Date:2007-12-25 20:21 PM&lt;/p><br />
&#160; * @author qingbao-gao<br />
&#160; * @return&#160; 平均值<br />
&#160; */<br />
&#160;public static double ave(double []x)<br />
&#160;{<br />
&#160;&#160;double ave=0;<br />
&#160;&#160;double sum=0;<br />
&#160;&#160;if(x!=null)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;for(int i=0;i&lt;x.length;i++)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;sum+=x[i];<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;System.out.println("sum-->"+sum);<br />
&#160;&#160;&#160;ave=sum/x.length;<br />
&#160;&#160;&#160;System.out.println("ave"+ave+"x.length"+x.length);<br />
&#160;&#160;}<br />
&#160;&#160;return ave;<br />
&#160;}<br />
&#160;/**<br />
&#160; * &lt;p>由X值获得Y值&lt;/p><br />
&#160; * @param x&#160; 当前X轴输入值,即为预测的月份<br />
&#160; * @param xx 当前X轴输入值的前X数据点<br />
&#160; * @param a&#160; 存储多项式系数的数组<br />
&#160; * @param m&#160; 存储多项式的最高次数的数组<br />
&#160; * &lt;p>Date:2007-12-25 PM 20:07&lt;/p><br />
&#160; * &lt;P>Author:qingbao-gao&lt;/P><br />
&#160; * @return&#160;&#160; 对应X轴节点值的Y轴值<br />
&#160; */<br />
&#160;public static double getY(double x,double[]xx,double[]a,int m)<br />
&#160;{<br />
&#160;&#160;double y=0;<br />
&#160;&#160;double ave=ave(xx);<br />
&#160;&#160;<br />
&#160;&#160;double l=0;<br />
&#160;&#160;for(int i=0;i&lt;m;i++)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;l=a[0];<br />
&#160;&#160;&#160;if(i>0)<br />
&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;y+=a[i]*Math.pow((x-ave),i );<br />
&#160;&#160;&#160;&#160;System.out.println(i+"--|-->"+y+"--a[i]--"+a[i]);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;System.out.println("a[0]|"+a[0]);<br />
&#160;&#160;}<br />
&#160;&#160;System.out.println("l--|"+(l));<br />
&#160;&#160;return (y+l);<br />
&#160;}</font><br />
//--------------------------------------------测试代码<br />
<p><font size="3">public static void main(String []args)throws DBException<br />
&#160;{&#160;&#160;</font></p>
<p><font size="3">&#160;&#160;double []x={200401,200402,200403,200404,200405,200406,200407,200408,200409,2004010,2004011,2004012,200501,200502,200503,200504};<br />
&#160;&#160;double []y={51,51,53,53,54,55,57,60,63,64,66,66,69,71,72,75};<br />
&#160;&#160;double[]a=new double[20];<br />
&#160;&#160;double[]aa= PolyFit(x,&#160; y,&#160; 16,a, 3);<br />
&#160;&#160;double yy=0;<br />
&#160;&#160;System.out.println("拟合-->"+getY(200505,x,aa,3));<br />
</font></p>
<p><font size="3">&#160;}</font></p>
测试结果为：<font size="3">拟合-->72.38898870320554</font><br />
效果还可以。<br />
</font></span>
<div><font  color="#4B4B4B" face="Verdana"><span  style="line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:28 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法JAVA实现【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265868.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265868.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265868.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265868.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/07/10/129405.html</font><br />
<span style="color: #000000; ">/**</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&#160;Demonstrate&#160;KMP&#160;algorithm&#160;in&#160;Java<br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*</span><span style="color: #000000; "><br />
&#160;</span><span style="color: #000000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;KMP&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;indexOf(String&#160;target,String&#160;pattern)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pLen</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pattern.length();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;tLen</span><span style="color: #000000; ">=</span><span style="color: #000000; ">target.length();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">the&#160;fail&#160;function</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;failFunc[]</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">[pLen];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">build&#160;fail&#160;function</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pattern.charAt(i)</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">pattern.charAt(j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">j</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">recursion&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[j];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pattern.charAt(i)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">pattern.charAt(j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[i]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;failFunc[i]</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,tPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(tPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">tLen</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">pPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(target.charAt(tPos)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">pattern.charAt(pPos))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">match&#160;,then&#160;do&#160;forward</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pPos</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">target&#160;go&#160;forward</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tPos</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">target&#160;postion&#160;don't&#160;change,pattern&#160;go&#160;back&#160;&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pPos</span><span style="color: #000000; ">=</span><span style="color: #000000; ">failFunc[pPos</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pPos</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pLen)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;tPos</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pLen;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}<br />
</span></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:27 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图的深度优先搜索【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265867.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265867.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265867.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265867.html</trackback:ping><description><![CDATA[<span style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_410126.html</font><br />
<table bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1" style="border-collapse: collapse; ">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; line-height: 150%; "><code><span style="color: #000000; "><span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">class</span>&#160;DFSTest<br />
            <span style="color: #0000cc; ">{</span>&#160;<br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">void</span>&#160;main<span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">String</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;args<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>1<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">,</span>0<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;DFS dfs<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;DFS<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;dfs<span style="color: #0000cc; ">.</span>input<span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">,</span>&#160;0<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">=</span>dfs<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">getList</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">System</span><span style="color: #0000cc; ">.</span>out<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">print</span><span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">+</span><span style="color: #ff00ff; ">" "</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            <br />
            <span style="color: #0000ff; ">class</span>&#160;DFS<br />
            <span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;visited<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;input<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>graph<span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visited<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">:</span>&#160;visited<span style="color: #0000cc; ">)</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span>v<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visited<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;k<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>1&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;visited<span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span>k<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">getList</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">return</span>&#160;<span style="color: #ff0000; ">list</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            </span></code></p>
            <div><font color="#0000CC" face=""><br />
            </font></div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:24 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关键路径的java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265866.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265866.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265866.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265866.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">
<p>来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_408864.html</font><br />
</p>
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<p><font color="#ff0000">/*<br />
&#160;* @title：关键路径<br />
&#160;* @input: 有向带权图，图以邻接表形式表示，头结点只存储该顶点的度，后继结点存储顶点及权值<br />
&#160;* @output: 所有可能关键路径的并集path，path[i][0]及path[i][1]代表边的顶点，path[i][2]代表权值<br />
&#160;*/</font></p>
<p>import java.util.*;<br />
public class CriticalPathTest<br />
{&#160;&#160;<br />
&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] graph={{0, 1,6, 2,4, 3,5,},{1, 4,1,},{1, 4,1},{1, 5,2,},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {2, 6,9, 7,7,},{1, 7,4,},{1, 8,2,},{2, 8,4,},{2,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] path;</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160; CriticalPath criticalPath=new CriticalPath();<br />
&#160;&#160;&#160;&#160;&#160;&#160; criticalPath.input(graph);<br />
&#160;&#160;&#160;&#160;&#160;&#160; path=criticalPath.getPath();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;criticalPath.getLength(); i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("边：" + path[i][0]+ "-" + path[i][1] +" 权："+ path[i][2]);<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</p>
<p>class CriticalPath<br />
{<br />
&#160;&#160;&#160; private int[][] graph;<br />
&#160;&#160;&#160; private int[][] path;<br />
&#160;&#160;&#160; int len;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; void input(int[][] graph)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.graph=graph;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; path=new int[graph.length-1][];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; len=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; calculate();<br />
&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[] ve=new int[graph.length];&#160; //事件的最发生时间<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack1=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack2=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int i,j,v;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int t : ve) t=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack1.push(0);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack1.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; v=(Integer)stack1.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if((--graph[j][0])==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack1.push(j);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(ve[v]+graph[v][i+1]>ve[j]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ve[j]=ve[v]+graph[v][i+1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stack2.push(v);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[] vl=new int[graph.length];&#160; //事件的最迟生时间<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=0; i&lt;graph.length; i++) vl[i]=1000;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; vl[graph.length-1]=ve[graph.length-1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack2.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; v=(Integer)stack2.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(vl[j]-graph[v][i+1]&lt;vl[v]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; vl[v]=vl[j]-graph[v][i+1];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(v=0; v&lt;graph.length-1; v++){ //求关键路径的所有边<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(i=1; i&lt;graph[v].length; i=i+2){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; j=graph[v][i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(ve[v]==(vl[j]-graph[v][i+1])){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[][] p={{v, j,graph[v][i+1],},};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; path[len++]=p[0];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; int[][] getPath()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return path;<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; int getLength()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return len;<br />
&#160;&#160;&#160; }<br />
}</p>
<p><font color="#0000ff">结果如下：</font></p>
<p><font color="#0000ff">边：0-1 权：6<br />
边：1-4 权：1<br />
边：4-6 权：9<br />
边：4-7 权：7<br />
边：6-8 权：2<br />
边：7-8 权：4</font></p>
<p><font color="#0000ff">易知关键路径有两条：</font></p>
<p><font color="#0000ff">0-1-4-6-8 及 0-1-4-7-8</font></p>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:22 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>拓扑排序之java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265865.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265865.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265865.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265865.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_408098.html</font><br />
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<div align="left"><font size="2"><font color="#ff0000">/*<br />
&#160;* @title：拓扑排序<br />
&#160;* @input: 一个有向无环图，表述为一个邻接矩阵graph[n][]，其中graph[i][0]为顶点i的入度，其余为其后继结点<br />
&#160;* @output: 一个拓扑序列list<br />
&#160;*/</font><br />
import java.util.*;<br />
public class TopologicalSortTest<br />
{&#160;&#160;<br />
&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[][] graph={{0,1,2,3,},{2,},{1,1,4,},{2,4,},{3,},{0,3,4,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160; int[] list=new int[graph.length];;</font></div>
<div align="left"><font size="2">&#160;&#160;&#160;&#160;&#160;&#160; TopologicalSort topologicalSort=new TopologicalSort();<br />
&#160;&#160;&#160;&#160;&#160;&#160; topologicalSort.input(graph);<br />
&#160;&#160;&#160;&#160;&#160;&#160; list=topologicalSort.getList();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int l : list){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.print(l+" ");<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</font></div>
<div align="left"><font size="2">class TopologicalSort<br />
{<br />
&#160;int[][] graph;<br />
&#160;int[] list;<br />
&#160;<br />
&#160;&#160;&#160; void input(int[][] graph)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160; &#160;this.graph=graph;<br />
&#160;&#160;&#160; &#160;list=new int[graph.length];<br />
&#160;&#160;&#160; &#160;calculate();<br />
&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stack stack=new Stack();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;if(graph[i][0]==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;stack.push(i);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; int i=0;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(stack.empty()!=true){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;list[i]=(Integer)stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;for(int j=1; j&lt;graph[list[i]].length; j++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;int k=graph[list[i]][j];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;if((--graph[k][0])==0){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;stack.push(k);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;i++;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(i&lt;graph.length){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;System.out.println("存在环，不可排序！");<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;System.exit(0);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }</font></div>
<div align="left"><font size="2">&#160;&#160;&#160; int[] getList()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160; &#160;return list;<br />
&#160;&#160;&#160; }<br />
}</font></div>
<div align="left"><font size="2"></font></div>
<div align="left"><font size="2"></font>&#160;</div>
<div align="left"><font color="#0000ff" size="2">运行结果：</font></div>
<div align="left"><font color="#0000ff" size="2">5 0 3 2 4 1</font></div>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:22 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小生成树的Java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265864.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265864.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265864.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265864.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_407408.html</font><br />
<div id="art" width="560" style="margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; ">
<div><font size="2">/*<br />
&#160;* @input: 一个有向无环带权图，表述为一个二维数组graph[n][n]<br />
&#160;* @output: 最小生成树tree[n-1][3],tree[i][0]及tree[i][1]为边之顶点，tree[i][2]为权<br />
&#160;*/</font></div>
<div><font size="2">public class MiniSpanTreeTest<br />
{&#160;&#160;<br />
&#160;&#160; static int[][] graph={<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,6,1,5,1000,1000},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {6,1000,5,1000,3,1000},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1,5,1000,5,6,4},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {5,1000,5,1000,1000,2},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,3,6,1000,1000,6},<br />
&#160;&#160;&#160;&#160;&#160;&#160; {1000,1000,4,2,6,1000},<br />
&#160;&#160; };<br />
&#160;&#160; static int v=0;<br />
&#160;&#160; static int[][] tree;</font></div>
<div><font size="2">&#160;&#160; public static void main(String[] args)<br />
&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160; MiniSpanTree miniSpanTree=new MiniSpanTree();<br />
&#160;&#160;&#160;&#160;&#160;&#160; miniSpanTree.input(graph, v);<br />
&#160;&#160;&#160;&#160;&#160;&#160; tree=miniSpanTree.getTree();<br />
&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length-1; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("边：" + tree[i][0] + "-" + tree[i][1] + "&#160; 权：" + tree[i][2]);<br />
&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160; }<br />
}</font></div>
<div><font size="2">class MiniSpanTree<br />
{<br />
&#160;&#160;&#160; private int[][] graph;<br />
&#160;&#160;&#160; private int v;<br />
&#160;&#160;&#160; private int[][] tree;<br />
&#160;&#160;&#160; private boolean[] s;</font></div>
<div><font size="2">&#160;&#160;&#160; void input(int[][] graph, int v)<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.graph=graph;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.v=v;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; tree=new int[graph.length-1][];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; s=new boolean[graph.length];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(boolean i : s) i=false;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; s[v]=true;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; calculate();<br />
&#160;&#160;&#160; }</font></div>
<div><font size="2">&#160;&#160;&#160; void calculate()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0; i&lt;graph.length-1; i++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int[][] edge ={{0,0,1000,},};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int j=0; j&lt;graph.length; j++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int k=0; s[j]==true &amp;&amp; k&lt;graph.length; k++){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(s[k]==false &amp;&amp; graph[j][k]&lt;edge[0][2]){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][0]=j;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][1]=k;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; edge[0][2]=graph[j][k];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; tree[i]=edge[0];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; s[tree[i][1]]=true;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />
&#160;&#160;&#160; }</font></div>
<div><font size="2">&#160;&#160;&#160; int[][] getTree()<br />
&#160;&#160;&#160; {<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160; return tree;<br />
&#160;&#160;&#160; }<br />
}</font></div>
<div><font size="2"></font></div>
<div><font size="2"></font>&#160;</div>
<div><font color="#0000ff" size="2">结果如下：</font></div>
<div><font color="#0000ff" size="2">边：0-2&#160; 权：1<br />
边：2-5&#160; 权：4<br />
边：5-3&#160; 权：2<br />
边：2-1&#160; 权：5<br />
边：1-4&#160; 权：3</font></div>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:20 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最短路径算法之java实现【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265863.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265863.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265863.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265863.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">来源：<font size="3">http://blog.chinaunix.net/u1/50399/showart_405608.html</font><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p><font size="3"><font color="#0000ff">标题：</font>Single-Source Shortest Paths (Dijkstra's algorithm)<br />
            <font color="#0000ff">输入：</font>n个顶点的有向带权图G，表述为n*n矩阵。<br />
            &#160;&#160;&#160;&#160;&#160; 起始点:v0 其取值范围为0~n-1。<br />
            <font color="#0000ff">输出：</font>最短路径及其长度，表述为一个二维数组path[n-1][3]，每个数组元素由三个数据项组成，其中path[i][0]代表此最短路径之终点，path[i][1]代表此最短路径之长度，path[i][2]代表此最短路径终点之前趋。</font></p>
            </td>
        </tr>
    </tbody>
</table>
<div></div>
<p>&#160;</p>
<div></div>
<div></div>
<table bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1" style="border-collapse: collapse; ">
    <tbody>
        <tr>
            <td style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <p style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; line-height: 150%; "><code><span style="color: #000000; "><span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">class</span>&#160;ShortestPathTest<br />
            <span style="color: #0000cc; ">{</span>&#160;<br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;10&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;30&#160;<span style="color: #0000cc; ">,</span>&#160;100&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;5&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;50&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;10&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;20&#160;<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;60&#160;<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span>1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span>&#160;<span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span><br />
            <br />
            &#160;&#160;&#160;<span style="color: #0000ff; ">public</span>&#160;<span style="color: #0000ff; ">static</span>&#160;<span style="color: #0000ff; ">void</span>&#160;main<span style="color: #0000cc; ">(</span><span style="color: #ff0000; ">String</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;args<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;ShortestPath sortestPath<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;ShortestPath<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;sortestPath<span style="color: #0000cc; ">.</span>input<span style="color: #0000cc; ">(</span>graph<span style="color: #0000cc; ">,</span>&#160;v<span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">=</span>sortestPath<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">getPath</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">!</span><span style="color: #0000cc; ">=</span>1000<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff0000; ">System</span><span style="color: #0000cc; ">.</span>out<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">println</span><span style="color: #0000cc; ">(</span><span style="color: #ff00ff; ">"源点："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;v&#160;<span style="color: #0000cc; ">+</span>&#160;<span style="color: #ff00ff; ">"; 终点："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span>&#160;<span style="color: #0000cc; ">+</span>&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff00ff; ">"; 长度："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span>&#160;<span style="color: #0000cc; ">+</span>&#160;<span style="color: #ff00ff; ">"; 终点前趋："</span>&#160;<span style="color: #0000cc; ">+</span>&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>2<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span><br />
            <br />
            <span style="color: #0000ff; ">class</span>&#160;ShortestPath<br />
            <span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">private</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;input<span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;graph<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000ff; ">int</span>&#160;v<span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>graph<span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">this</span><span style="color: #0000cc; ">.</span>v<span style="color: #0000cc; ">=</span>v<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">void</span>&#160;calculate<span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;s<span style="color: #0000cc; ">=</span><span style="color: #0000ff; ">new</span>&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i&#160;<span style="color: #0000cc; ">:</span>&#160;s<span style="color: #0000cc; ">)</span>i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;s<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>2<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//按路径值从小到大的顺序求解各条最短路径<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;i<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">;</span>&#160;i<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求v到集合s2的最短路径pointToSet[0]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;pointToSet<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>s<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">[</span>v<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求集合s1到集合s2的最短路径setToSet[0]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;setToSet<span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">{</span><span style="color: #0000cc; ">{</span>1<span style="color: #0000cc; ">,</span>&#160;1000<span style="color: #0000cc; ">,</span>&#160;<span style="color: #0000cc; ">-</span>1<span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">,</span><span style="color: #0000cc; ">}</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;j<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">&lt;</span>i<span style="color: #0000cc; ">;</span>&#160;j<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//求顶点path[j][0]到点集s2的最短路径pointToSet[1]<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1000<span style="color: #0000cc; ">;</span>&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>2<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>j<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">for</span><span style="color: #0000cc; ">(</span><span style="color: #0000ff; ">int</span>&#160;k<span style="color: #0000cc; ">=</span>0<span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">&lt;</span>graph<span style="color: #0000cc; ">.</span><span style="color: #ff0000; ">length</span><span style="color: #0000cc; ">;</span>&#160;k<span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">+</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>s<span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span><span style="color: #0000cc; ">=</span>0&#160;<span style="color: #0000cc; ">&amp;</span><span style="color: #0000cc; ">&amp;</span>&#160;graph<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>graph<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>k<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>k<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">+</span>path<span style="color: #0000cc; ">[</span>j<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #ff9900; ">//比较pointToSet[0]及setToSet[0]，求其小者，作为path[i]之值<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">if</span><span style="color: #0000cc; ">(</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">&lt;</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>1<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>pointToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">else</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>setToSet<span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;s<span style="color: #0000cc; ">[</span>path<span style="color: #0000cc; ">[</span>i<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span>0<span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">=</span>1<span style="color: #0000cc; ">;</span>&#160;<span style="color: #ff9900; ">//把顶点划为已求最短路终点之点集<br />
            </span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <br />
            &#160;&#160;&#160;&#160;<span style="color: #0000ff; ">int</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span><span style="color: #0000cc; ">[</span><span style="color: #0000cc; ">]</span>&#160;<span style="color: #ff0000; ">getPath</span><span style="color: #0000cc; ">(</span><span style="color: #0000cc; ">)</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">{</span><br />
            &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color: #0000ff; ">return</span>&#160;path<span style="color: #0000cc; ">;</span><br />
            &#160;&#160;&#160;&#160;<span style="color: #0000cc; ">}</span><br />
            <span style="color: #0000cc; ">}</span></span></code></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&#160;</p>
<p><font color="#0080ff">输出结果：<br />
源点：0; 终点：2; 长度：10; 终点前趋：-1<br />
源点：0; 终点：4; 长度：30; 终点前趋：-1<br />
源点：0; 终点：3; 长度：50; 终点前趋：1<br />
源点：0; 终点：5; 长度：60; 终点前趋：2</font></p>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:19 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入，冒泡，选择，Shell,快速排序[转]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265862.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265862.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265862.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265862.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">
<p>转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/12/13/167364.html</font><br />
为了便于管理，先引入个基础类：<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">abstract</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">abstract</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from&#160;,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len);<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sort(array,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,array.length);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">protected</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;swap(E[]&#160;array,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from&#160;,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[from];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[to]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}</span></div>
<p>一 插入排序<br />
该算法在数据规模小的时候十分高效，该算法每次插入第K+1到前K个有序数组中一个合适位置，K从0开始到N-1,从而完成排序：<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;InsertSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(tmp.compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;<br />
<br />
}</span></div>
<p><br />
二 冒泡排序<br />
这可能是最简单的排序算法了，算法思想是每次从数组末端开始比较相邻两元素，把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。（当然也可以从数组开始端开始比较相邻两元素，把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)<br />
<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BubbleSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;DWON</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;bubble_down(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">i;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,j);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;bubble_up(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">from;i</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">i;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">])</span><span style="color: #000000; ">></span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,j,j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(DWON)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bubble_down(array,from,len);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bubble_up(array,from,len);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
}</span></div>
<p><br />
三，选择排序<br />
选择排序相对于冒泡来说，它不是每次发现逆序都交换，而是在找到全局第i小的时候记下该元素位置，最后跟第i个元素交换，从而保证数组最终的有序。<br />
相对与插入排序来说，选择排序每次选出的都是全局第i小的，不会调整前i个元素了。<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;SelectSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;smallest</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">from;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(array[j].compareTo(array[smallest])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;smallest</span><span style="color: #000000; ">=</span><span style="color: #000000; ">j;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;swap(array,i,smallest);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;<br />
}<br />
</span></div>
<p>四 Shell排序<br />
Shell排序可以理解为插入排序的变种，它充分利用了插入排序的两个特点：<br />
1）当数据规模小的时候非常高效<br />
2）当给定数据已经有序时的时间代价为O(N)<br />
所以，Shell排序每次把数据分成若个小块，来使用插入排序，而且之后在这若个小块排好序的情况下把它们合成大一点的小块，继续使用插入排序，不停的合并小块，知道最后成一个块，并使用插入排序。<br />
<br />
这里每次分成若干小块是通过&#8220;增量&#8221; 来控制的，开始时增量交大，接近N/2,从而使得分割出来接近N/2个小块，逐渐的减小&#8220;增量&#8220;最终到减小到1。<br />
<br />
一直较好的增量序列是2^k-1,2^(k-1)-1,.....7,3,1,这样可使Shell排序时间复杂度达到O(N^1.5)<br />
所以我在实现Shell排序的时候采用该增量序列<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;ShellSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;Our&#160;delta&#160;value&#160;choose&#160;2^k-1,2^(k-1)-1,<img alt="" src="http://www.blogjava.net/Images/dot.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /><img alt="" src="http://www.blogjava.net/Images/dot.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " />.7,3,1.<br />
&#160;&#160;&#160;&#160;&#160;*&#160;complexity&#160;is&#160;O(n^1.5)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">1.calculate&#160;&#160;the&#160;first&#160;delta&#160;value;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">((value</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">len)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(value</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;delta</span><span style="color: #000000; ">=</span><span style="color: #000000; ">value;delta</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;delta</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(delta</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">delta;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;modify_insert_sort(array,from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">i,len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i,delta);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;modify_insert_sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;delta)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(len</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">delta;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len;i</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">delta)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[i];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;j</span><span style="color: #000000; ">=</span><span style="color: #000000; ">i;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;j</span><span style="color: #000000; ">></span><span style="color: #000000; ">from;j</span><span style="color: #000000; ">-=</span><span style="color: #000000; ">delta)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(tmp.compareTo(array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">delta])</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[j</span><span style="color: #000000; ">-</span><span style="color: #000000; ">delta];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">break</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[j]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;}<br />
}</span></div>
<p><br />
五 快速排序<br />
快速排序是目前使用可能最广泛的排序算法了。<br />
一般分如下步骤：<br />
1）选择一个枢纽元素（有很对选法，我的实现里采用去中间元素的简单方法）<br />
2）使用该枢纽元素分割数组，使得比该元素小的元素在它的左边，比它大的在右边。并把枢纽元素放在合适的位置。<br />
3）根据枢纽元素最后确定的位置，把数组分成三部分，左边的，右边的，枢纽元素自己，对左边的，右边的分别递归调用快速排序算法即可。<br />
快速排序的核心在于分割算法，也可以说是最有技巧的部分。<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; padding-top: 4px; background-color: #eeeeee; "><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&#160;algorithms;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;QuickSorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Comparable</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&#160;Sorter</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">E</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;{<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&#160;(non-Javadoc)<br />
&#160;&#160;&#160;&#160;&#160;*&#160;@see&#160;algorithms.Sorter#sort(E[],&#160;int,&#160;int)<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;len)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,from,from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">final</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;q_sort(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(to</span><span style="color: #000000; ">-</span><span style="color: #000000; ">from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pivot</span><span style="color: #000000; ">=</span><span style="color: #000000; ">selectPivot(array,from,to);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pivot</span><span style="color: #000000; ">=</span><span style="color: #000000; ">partion(array,from,to,pivot);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,from,pivot</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;q_sort(array,pivot</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,to);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;partion(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;pivot)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;E&#160;tmp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[pivot];<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[pivot]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;to's&#160;position&#160;is&#160;available</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">array[from].compareTo(tmp)</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)from</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[to]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[from];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;from's&#160;position&#160;is&#160;available</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;to</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">array[to].compareTo(tmp)</span><span style="color: #000000; ">>=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)to</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(from</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">to)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">array[to];</span><span style="color: #008000; ">//</span><span style="color: #008000; ">now&#160;to's&#160;position&#160;is&#160;available&#160;now&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;from</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;array[from]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">tmp;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;from;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;selectPivot(E[]&#160;array,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;from,&#160;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&#160;to)&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&#160;(from</span><span style="color: #000000; ">+</span><span style="color: #000000; ">to)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}</span></div>
<p><br />
还有归并排序，堆排序，桶式排序，基数排序，下次在归纳。</p>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:18 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>红黑树的Java实现 【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265861.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265861.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265861.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265861.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/20/169120.html红黑树可能是要考虑情况最多的BST树了，它有自己的规则（见代码的注释），通过这些规则可以保证花费较小的代价来达到相对平衡。注意，红黑树仍然不是平衡树，但是统计性能要好于AVL树。要保持红黑树的规则，主要通过两类操作，一类是换色，一类还是旋转。红黑树插入主...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265861.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:16 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>排序算法复习（Java实现）(二）： 归并排序，堆排序，桶式排序，基数排序 【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265860.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:13:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265860.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265860.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265860.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/14/167618.html六 归并排序算法思想是每次把待排序列分成两部分，分别对这两部分递归地用归并排序，完成后把这两个子部分合并成一个序列。归并排序借助一个全局性临时数组来方便对子序列的归并，该算法核心在于归并。package&#160;algorithms;imp...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265860.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:13 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图及其算法复习（Java实现) 一：存储结构，深度优先，广度优先【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265858.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265858.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265858.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265858.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/14/167764.html很早就想总结一下了，一直没有时间，OK，进入正题。一 图的基本概念及存储结构图G是由顶点的有穷集合，以及顶点之间的关系组成，顶点的集合记为V，顶点之间的关系构成边的集合EG=(V,E).说一条边从v1,连接到v2,那么有v1Ev2(E是V上的一个...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265858.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:11 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伸展树与半伸展树Java实现【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265857.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265857.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265857.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265857.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.blogjava.net/javacap/archive/2007/12/19/168627.html伸展树与半伸展树属于自组织的数据结构，能按访问频率调整节点的位置调整一般通过如下方式：1）绕根的单旋转，跟AVL的单旋转类似2）一字型旋转(ZigZig Rotation)3)之字形旋转(ZigZag Rotation)旋转操作较简单，有点点...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265857.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:10 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树的非递归遍历 粗糙版【转】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265855.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265855.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265855.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265855.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">转自：<font size="3">http://www.blogjava.net/javacap/archive/2007/10/11/152073.html</font><br />
<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Stack;<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&#160;java.util.Vector;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;*&#160;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&#160;yovn<br />
&#160;*<br />
&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;TreeDemo&#160;{<br />
&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">interface</span><span style="color: #000000; ">&#160;NodeVistor<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;visit(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;BinaryTree(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.root</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,pre-order</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;NLRVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">stack.isEmpty()</span><span style="color: #000000; ">||</span><span style="color: #000000; ">pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer.rightChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer.rightChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">go&#160;to&#160;right&#160;child</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,&#160;in-order</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;LNRVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">stack.isEmpty()</span><span style="color: #000000; ">||</span><span style="color: #000000; ">pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;left&#160;child&#160;here,&#160;then&#160;visit&#160;root&#160;and&#160;then&#160;go&#160;to&#160;right&#160;child</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.rightChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">no&#160;recursion&#160;,post-order,this&#160;one&#160;is&#160;the&#160;most&#160;complex&#160;one.<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">we&#160;need&#160;know&#160;from&#160;which&#160;side&#160;,it&#160;back(left&#160;or&#160;right)</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;LRNVisit(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(root</span><span style="color: #000000; ">==</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;stack</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Stack</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">mark&#160;left&#160;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pointer</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(pointer.visitedRight)</span><span style="color: #008000; ">//</span><span style="color: #008000; ">back&#160;from&#160;right&#160;child,&#160;so&#160;we&#160;can&#160;visit&#160;it&#160;now.</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(stack.isEmpty())</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">stack.pop();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer.visitedRight</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stack.push(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pointer.rightChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;levelOrder(NodeVistor&#160;visitor)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(root</span><span style="color: #000000; ">==</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;pointer</span><span style="color: #000000; ">=</span><span style="color: #000000; ">root;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">&#160;queue</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;Vector</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">>></span><span style="color: #000000; ">();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(pointer);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">queue.isEmpty())<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node</span><span style="color: #000000; ">=</span><span style="color: #000000; ">queue.remove(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;visitor.visit(node);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(node.leftChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(node.leftChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(node.rightChild</span><span style="color: #000000; ">!=</span><span style="color: #0000ff; ">null</span><span style="color: #000000; ">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;queue.add(node.rightChild);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode(T&#160;data)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.data</span><span style="color: #000000; ">=</span><span style="color: #000000; ">data;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;T&#160;data;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">boolean</span><span style="color: #000000; ">&#160;visitedRight;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;leftChild;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;rightChild;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;TreeDemo()&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#160;TODO&#160;Auto-generated&#160;constructor&#160;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&#160;&#160;&#160;&#160;&#160;*&#160;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&#160;args<br />
&#160;&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;root</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">A</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">B</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">C</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.leftChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">D</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">E</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">F</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.leftChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">G</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild.leftChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">H</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;root.rightChild.rightChild.rightChild</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">I</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NodeVistor&#160;visitor</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;NodeVistor()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&#160;visit(BinaryTreeNode</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">T</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;node)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">'</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">node.data</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">'</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;};<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">&#160;tree</span><span style="color: #000000; ">=</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&#160;BinaryTree</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; ">(root);<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pre-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.NLRVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">in-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.LNRVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">post-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.LRNVisit(visitor);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">level-order&#160;visit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tree.levelOrder(visitor);<br />
&#160;&#160;&#160;&#160;}<br />
<br />
}<br />
</span></span>
<div><font  face="Verdana" size="3"><span  style="font-size: 13px; line-height: 19px;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/1504/aggbug/265855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 22:03 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant-build.xml打包应用程序【总结】</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265851.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265851.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265851.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265851.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 弄了好久的ant打包终于明白了，贴出来大家分享。&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project name="gpdi" basedir="." default="deploy"&gt;&nbsp;&lt;!-- Properties and Paths --&gt;&nbsp;&lt;property name="di...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/04/15/265851.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/265851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 21:57 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java源码：md5加密算法（转帖）</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265667.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265667.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265667.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265667.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">http://www.yuanma.org/data/2006/0907/article_1475.htm<br />
<h2><strong>作者：</strong><a href="http://www.yuanma.org/member.php?action=show&amp;username=webmaster" target="_blank" style="color: #1a8bc8; text-decoration: none; ">zxjcool</a>&#160;&#160;&#160;&#160;&#160;&#160;<strong>来源：</strong><a href="http://blog.csdn.net/zxjcool/archive/2006/09/07/1188598.aspx" target="_blank" style="color: #1a8bc8; text-decoration: none; ">zz</a>&#160;&#160;&#160;&#160;&#160;<strong>发表时间：</strong>2006-09-07&#160;&#160;&#160;&#160;&#160;<strong>浏览次数：</strong>&#160;6296 &#160;&#160;&#160;&#160;&#160;<strong>字号：</strong><a class="black" href="javascript:fontZoom(16)" style="color: #1a8bc8; text-decoration: none; ">大</a>&#160;&#160;<a class="black" href="javascript:fontZoom(14)" style="color: #1a8bc8; text-decoration: none; ">中</a>&#160;&#160;<a class="black" href="javascript:fontZoom(12)" style="color: #1a8bc8; text-decoration: none; ">小</a></h2>
<div class="content" id="fontzoom">
<p>&nbsp;</p>
<p>import java.lang.reflect.*;</p>
<p>/*************************************************<br />
md5 类实现了RSA Data Security, Inc.在提交给IETF<br />
的RFC1321中的MD5 message-digest 算法。<br />
*************************************************/</p>
<p>public class MD5&#160;<br />
{<br />
&#160;// 下面这些S11-S44实际上是一个4*4的矩阵，这样写是方便修改<br />
&#160;static final int S11 = 7;<br />
&#160;static final int S12 = 12;<br />
&#160;static final int S13 = 17;<br />
&#160;static final int S14 = 22;</p>
<p>&#160;static final int S21 = 5;<br />
&#160;static final int S22 = 9;<br />
&#160;static final int S23 = 14;<br />
&#160;static final int S24 = 20;</p>
<p>&#160;static final int S31 = 4;<br />
&#160;static final int S32 = 11;<br />
&#160;static final int S33 = 16;<br />
&#160;static final int S34 = 23;</p>
<p>&#160;static final int S41 = 6;<br />
&#160;static final int S42 = 10;<br />
&#160;static final int S43 = 15;<br />
&#160;static final int S44 = 21;</p>
<p>&#160;static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&#160;&#160;&#160;0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&#160;&#160;&#160;0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
&#160;&#160;&#160;0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };</p>
<p>&#160;// 下面的三个成员是MD5计算过程中用到的3个核心数据，在原始的C实现中<br />
&#160;// 被定义到MD5_CTX结构中<br />
&#160;<br />
&#160;private long[] state = new long[4];&#160; // state (ABCD)<br />
&#160;private long[] count = new long[2];&#160; // number of bits, modulo 2^64 (lsb first)<br />
&#160;private byte[] buffer = new byte[64]; // input buffer</p>
<p>&#160;// digestHexStr是MD5的唯一一个公共成员，是最新一次计算结果的<br />
&#160;//&#160; 16进制ASCII表示.<br />
&#160;<br />
&#160;public String digestHexStr;</p>
<p>&#160;// digest,是最新一次计算结果的2进制内部表示，表示128bit的MD5值.<br />
&#160;<br />
&#160;private byte[] digest = new byte[16];</p>
<p>&#160;// getMD5ofStr是类MD5最主要的公共方法，入口参数是你想要进行MD5变换的字符串<br />
&#160;//&#160; 返回的是变换完的结果，这个结果是从公共成员digestHexStr取得的．<br />
&#160;&#160;<br />
&#160;public String getMD5ofStr(String inbuf)&#160;<br />
&#160;{<br />
&#160;&#160;md5Init();<br />
&#160;&#160;md5Update(inbuf.getBytes(), inbuf.length());<br />
&#160;&#160;md5Final();<br />
&#160;&#160;digestHexStr = "";<br />
&#160;&#160;for (int i = 0; i &lt; 16; i++)&#160;<br />
&#160;&#160;{<br />
&#160;&#160;&#160;digestHexStr += byteHEX(digest[i]);<br />
&#160;&#160;}<br />
&#160;&#160;return digestHexStr;<br />
&#160;}</p>
<p>&#160;// 这是MD5这个类的标准构造函数，JavaBean要求有一个public的并且没有参数的构造函数<br />
&#160;public MD5()&#160;<br />
&#160;{<br />
&#160;&#160;md5Init();<br />
&#160;&#160;return;<br />
&#160;}</p>
<p>&#160;// md5Init是一个初始化函数，初始化核心变量，装入标准的幻数<br />
&#160;<br />
&#160;private void md5Init()&#160;<br />
&#160;{<br />
&#160;&#160;count[0] = 0L;<br />
&#160;&#160;count[1] = 0L;<br />
&#160;&#160;// Load magic initialization constants.</p>
<p>&#160;&#160;state[0] = 0x67452301L;<br />
&#160;&#160;state[1] = 0xefcdab89L;<br />
&#160;&#160;state[2] = 0x98badcfeL;<br />
&#160;&#160;state[3] = 0x10325476L;</p>
<p>&#160;&#160;return;<br />
&#160;}</p>
<p>&#160;// F, G, H ,I 是4个基本的MD5函数，在原始的MD5的C实现中，由于它们是<br />
&#160;//&#160; 简单的位运算，可能出于效率的考虑把它们实现成了宏，在java中，我们把它们<br />
&#160;// 实现成了private方法，名字保持了原来C中的。<br />
&#160;&#160;<br />
&#160;private long F(long x, long y, long z) {<br />
&#160;&#160;return (x &amp; y) | ((~x) &amp; z);<br />
&#160;}<br />
&#160;private long G(long x, long y, long z) {<br />
&#160;&#160;return (x &amp; z) | (y &amp; (~z));<br />
&#160;}<br />
&#160;private long H(long x, long y, long z) {<br />
&#160;&#160;return x ^ y ^ z;<br />
&#160;}<br />
&#160;private long I(long x, long y, long z) {<br />
&#160;&#160;return y ^ (x | (~z));<br />
&#160;}</p>
<p>&#160;// FF,GG,HH和II将调用F,G,H,I进行近一步变换<br />
&#160;<br />
&#160;private long FF(long a, long b, long c, long d, long x, long s,long ac) {<br />
&#160;&#160;a += F (b, c, d) + x + ac;<br />
&#160;&#160;a = ((int) a &lt;&lt; s) | ((int) a >>> (32 - s));<br />
&#160;&#160;a += b;<br />
&#160;&#160;return a;<br />
&#160;}</p>
<p>&#160;private long GG(long a, long b, long c, long d, long x, long s,long ac) {<br />
&#160;&#160;a += G (b, c, d) + x + ac;<br />
&#160;&#160;a = ((int) a &lt;&lt; s) | ((int) a >>> (32 - s));<br />
&#160;&#160;a += b;<br />
&#160;&#160;return a;<br />
&#160;}<br />
&#160;private long HH(long a, long b, long c, long d, long x, long s,long ac) {<br />
&#160;&#160;a += H (b, c, d) + x + ac;<br />
&#160;&#160;a = ((int) a &lt;&lt; s) | ((int) a >>> (32 - s));<br />
&#160;&#160;a += b;<br />
&#160;&#160;return a;<br />
&#160;}<br />
&#160;private long II(long a, long b, long c, long d, long x, long s,long ac) {<br />
&#160;&#160;a += I (b, c, d) + x + ac;<br />
&#160;&#160;a = ((int) a &lt;&lt; s) | ((int) a >>> (32 - s));<br />
&#160;&#160;a += b;<br />
&#160;&#160;return a;<br />
&#160;}</p>
<p>&#160;// md5Update是MD5的主计算过程，inbuf是要变换的字节串，inputlen是长度，这个<br />
&#160;// 函数由getMD5ofStr调用，调用之前需要调用md5init，因此把它设计成private的<br />
&#160;&#160;<br />
&#160;private void md5Update(byte[] inbuf, int inputLen) {<br />
&#160;&#160;int i, index, partLen;<br />
&#160;&#160;byte[] block = new byte[64];<br />
&#160;&#160;index = (int)(count[0] >>> 3) &amp; 0x3F;<br />
&#160;&#160;// /* Update number of bits */<br />
&#160;&#160;if ((count[0] += (inputLen &lt;&lt; 3)) &lt; (inputLen &lt;&lt; 3))<br />
&#160;&#160;&#160;count[1]++;<br />
&#160;&#160;count[1] += (inputLen >>> 29);</p>
<p>&#160;&#160;partLen = 64 - index;</p>
<p>&#160;&#160;// Transform as many times as possible.<br />
&#160;&#160;if (inputLen >= partLen) {<br />
&#160;&#160;&#160;md5Memcpy(buffer, inbuf, index, 0, partLen);<br />
&#160;&#160;&#160;md5Transform(buffer);</p>
<p>&#160;&#160;&#160;for (i = partLen; i + 63 &lt; inputLen; i += 64) {</p>
<p>&#160;&#160;&#160;&#160;md5Memcpy(block, inbuf, 0, i, 64);<br />
&#160;&#160;&#160;&#160;md5Transform (block);<br />
&#160;&#160;&#160;}<br />
&#160;&#160;&#160;index = 0;</p>
<p>&#160;&#160;} else<br />
&#160;&#160;&#160;i = 0;</p>
<p>&#160;&#160;///* Buffer remaining input */<br />
&#160;&#160;md5Memcpy(buffer, inbuf, index, i, inputLen - i);<br />
&#160;}<br />
private void md5Final () {<br />
&#160;&#160;byte[] bits = new byte[8];<br />
&#160;&#160;int index, padLen;</p>
<p>&#160;&#160;///* Save number of bits */<br />
&#160;&#160;Encode (bits, count, 8);</p>
<p>&#160;&#160;///* Pad out to 56 mod 64.<br />
&#160;&#160;index = (int)(count[0] >>> 3) &amp; 0x3f;<br />
&#160;&#160;padLen = (index &lt; 56) ? (56 - index) : (120 - index);<br />
&#160;&#160;md5Update (PADDING, padLen);</p>
<p>&#160;&#160;///* Append length (before padding) */<br />
&#160;&#160;md5Update(bits, 8);</p>
<p>&#160;&#160;///* Store state in digest */<br />
&#160;&#160;Encode (digest, state, 16);<br />
&#160;}</p>
<p>&#160;// md5Memcpy是一个内部使用的byte数组的块拷贝函数，从input的inpos开始把len长度的<br />
&#160; //&#160; 字节拷贝到output的outpos位置开始<br />
&#160;&#160;<br />
&#160;private void md5Memcpy (byte[] output, byte[] input,int outpos, int inpos, int len){<br />
&#160;&#160;int i;</p>
<p>&#160;&#160;for (i = 0; i &lt; len; i++)<br />
&#160;&#160;&#160;output[outpos + i] = input[inpos + i];<br />
&#160;}</p>
<p>&#160;// md5Transform是MD5核心变换程序，有md5Update调用，block是分块的原始字节<br />
&#160;&#160;<br />
&#160;private void md5Transform (byte block[]) {<br />
&#160;&#160;long a = state[0], b = state[1], c = state[2], d = state[3];<br />
&#160;&#160;long[] x = new long[16];</p>
<p>&#160;&#160;Decode (x, block, 64);</p>
<p>&#160;&#160;/* Round 1 */<br />
&#160;&#160;a = FF (a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */<br />
&#160;&#160;d = FF (d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */<br />
&#160;&#160;c = FF (c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */<br />
&#160;&#160;b = FF (b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */<br />
&#160;&#160;a = FF (a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */<br />
&#160;&#160;d = FF (d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */<br />
&#160;&#160;c = FF (c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */<br />
&#160;&#160;b = FF (b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */<br />
&#160;&#160;a = FF (a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */<br />
&#160;&#160;d = FF (d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */<br />
&#160;&#160;c = FF (c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */<br />
&#160;&#160;b = FF (b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */<br />
&#160;&#160;a = FF (a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */<br />
&#160;&#160;d = FF (d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */<br />
&#160;&#160;c = FF (c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */<br />
&#160;&#160;b = FF (b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */</p>
<p>&#160;&#160;/* Round 2 */<br />
&#160;&#160;a = GG (a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */<br />
&#160;&#160;d = GG (d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */<br />
&#160;&#160;c = GG (c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */<br />
&#160;&#160;b = GG (b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */<br />
&#160;&#160;a = GG (a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */<br />
&#160;&#160;d = GG (d, a, b, c, x[10], S22, 0x2441453L); /* 22 */<br />
&#160;&#160;c = GG (c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */<br />
&#160;&#160;b = GG (b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */<br />
&#160;&#160;a = GG (a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */<br />
&#160;&#160;d = GG (d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */<br />
&#160;&#160;c = GG (c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */<br />
&#160;&#160;b = GG (b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */<br />
&#160;&#160;a = GG (a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */<br />
&#160;&#160;d = GG (d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */<br />
&#160;&#160;c = GG (c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */<br />
&#160;&#160;b = GG (b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */</p>
<p>&#160;&#160;/* Round 3 */<br />
&#160;&#160;a = HH (a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */<br />
&#160;&#160;d = HH (d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */<br />
&#160;&#160;c = HH (c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */<br />
&#160;&#160;b = HH (b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */<br />
&#160;&#160;a = HH (a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */<br />
&#160;&#160;d = HH (d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */<br />
&#160;&#160;c = HH (c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */<br />
&#160;&#160;b = HH (b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */<br />
&#160;&#160;a = HH (a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */<br />
&#160;&#160;d = HH (d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */<br />
&#160;&#160;c = HH (c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */<br />
&#160;&#160;b = HH (b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */<br />
&#160;&#160;a = HH (a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */<br />
&#160;&#160;d = HH (d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */<br />
&#160;&#160;c = HH (c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */<br />
&#160;&#160;b = HH (b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */</p>
<p>&#160;&#160;/* Round 4 */<br />
&#160;&#160;a = II (a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */<br />
&#160;&#160;d = II (d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */<br />
&#160;&#160;c = II (c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */<br />
&#160;&#160;b = II (b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */<br />
&#160;&#160;a = II (a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */<br />
&#160;&#160;d = II (d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */<br />
&#160;&#160;c = II (c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */<br />
&#160;&#160;b = II (b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */<br />
&#160;&#160;a = II (a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */<br />
&#160;&#160;d = II (d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */<br />
&#160;&#160;c = II (c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */<br />
&#160;&#160;b = II (b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */<br />
&#160;&#160;a = II (a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */<br />
&#160;&#160;d = II (d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */<br />
&#160;&#160;c = II (c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */<br />
&#160;&#160;b = II (b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */</p>
<p>&#160;&#160;state[0] += a;<br />
&#160;&#160;state[1] += b;<br />
&#160;&#160;state[2] += c;<br />
&#160;&#160;state[3] += d;<br />
&#160;}</p>
<p>&#160;// Encode把long数组按顺序拆成byte数组，因为java的long类型是64bit的，<br />
&#160;// 只拆低32bit，以适应原始C实现的用途<br />
&#160;&#160;<br />
&#160;private void Encode (byte[] output, long[] input, int len)&#160;<br />
&#160;{<br />
&#160;&#160;int i, j;</p>
<p>&#160;&#160;for (i = 0, j = 0; j &lt; len; i++, j += 4) {<br />
&#160;&#160;&#160;output[j] = (byte)(input[i] &amp; 0xffL);<br />
&#160;&#160;&#160;output[j + 1] = (byte)((input[i] >>> 8) &amp; 0xffL);<br />
&#160;&#160;&#160;output[j + 2] = (byte)((input[i] >>> 16) &amp; 0xffL);<br />
&#160;&#160;&#160;output[j + 3] = (byte)((input[i] >>> 24) &amp; 0xffL);<br />
&#160;&#160;}<br />
&#160;}</p>
<p>&#160;// Decode把byte数组按顺序合成成long数组，因为java的long类型是64bit的，<br />
&#160; //&#160; 只合成低32bit，高32bit清零，以适应原始C实现的用途<br />
&#160;&#160;<br />
&#160;private void Decode (long[] output, byte[] input, int len)&#160;<br />
&#160;{<br />
&#160;&#160;int i, j;</p>
<p>&#160;&#160;for (i = 0, j = 0; j &lt; len; i++, j += 4)<br />
&#160;&#160;&#160;output[i] = b2iu(input[j]) |<br />
&#160;&#160;&#160;&#160;(b2iu(input[j + 1]) &lt;&lt; 8) |<br />
&#160;&#160;&#160;&#160;(b2iu(input[j + 2]) &lt;&lt; 16) |<br />
&#160;&#160;&#160;&#160;(b2iu(input[j + 3]) &lt;&lt; 24);</p>
<p>&#160;&#160;&#160;return;<br />
&#160;}</p>
<p>&#160;// b2iu是一个把byte按照不考虑正负号的原则的＂升位＂程序，因为java没有unsigned运算<br />
&#160;&#160;<br />
&#160;public static long b2iu(byte b) {<br />
&#160;&#160;return b &lt; 0 ? b &amp; 0x7F + 128 : b;<br />
&#160;}</p>
<p>&#160;// byteHEX()，用来把一个byte类型的数转换成十六进制的ASCII表示，<br />
&#160;//&#160;&#160; 因为java中的byte的toString无法实现这一点，我们又没有C语言中的<br />
&#160;//&#160;&#160; sprintf(outbuf,"%02X",ib)<br />
&#160;&#160;<br />
&#160; public static String byteHEX(byte ib)&#160;<br />
&#160;{<br />
&#160;&#160; char[] Digit = { '0','1','2','3','4','5','6','7','8','9',<br />
&#160;&#160;&#160; 'A','B','C','D','E','F' };<br />
&#160;&#160; char [] ob = new char[2];<br />
&#160;&#160; ob[0] = Digit[(ib >>> 4) &amp; 0X0F];<br />
&#160;&#160; ob[1] = Digit[ib &amp; 0X0F];<br />
&#160;&#160; String s = new String(ob);<br />
&#160;&#160; return s;<br />
&#160;}</p>
<p>&#160;public static String toMD5(String source)<br />
&#160;{<br />
&#160;&#160;MD5 md5 = new MD5();<br />
&#160;&#160;return md5.getMD5ofStr(source);<br />
&#160;}<br />
}<br />
</p>
<p>//结果生成 32位的加密字符串，有的实例中截取的是加密字串的 8--24位，长度为16位</p>
</div>
</span>
<img src ="http://www.blogjava.net/1504/aggbug/265667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 09:33 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个实现MD5的简洁的java类(转帖)</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265666.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265666.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265666.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265666.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">http://www.java3z.com/cwbwebhome/article/article5a/5103.html?id=5<br />
<table height="37" width="675" border="0">
    <tbody>
        <tr>
            <td width="319" style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; "><font color="#333333">比如你可以用md5来加密你的应用中的用户口令。&#160;<br />
            package&#160;test;&#160;&#160;<br />
            import&#160;java.security.MessageDigest;&#160;&#160;<br />
            /**&#160;&#160;<br />
            &#160;*&#160;&lt;p>Title:&#160;&lt;/p>&#160;&#160;<br />
            &#160;*&#160;&lt;p>Description:&#160;&lt;/p>&#160;&#160;<br />
            &#160;*&#160;&lt;p>Copyright:&#160;Copyright&#160;(c)&#160;2003&lt;/p>&#160;&#160;<br />
            &#160;*&#160;&lt;p>Company:&#160;&lt;/p>&#160;&#160;<br />
            &#160;*&#160;@author&#160;unascribed&#160;&#160;<br />
            &#160;*&#160;@version&#160;1.0&#160;&#160;<br />
            &#160;*/&#160;&#160;<br />
            <br />
            public&#160;class&#160;StringUtil&#160;{&#160;&#160;<br />
            <br />
            &#160;&#160;private&#160;final&#160;static&#160;String[]&#160;hexDigits&#160;=&#160;{&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;"0",&#160;"1",&#160;"2",&#160;"3",&#160;"4",&#160;"5",&#160;"6",&#160;"7",&#160;&#160;<br />
            &#160;&#160;&#160;&#160;&#160;&#160;"8",&#160;"9",&#160;"a",&#160;"b",&#160;"c",&#160;"d",&#160;"e",&#160;"f"};&#160;&#160;<br />
            </font></td>
            <td valign="top" width="346" style="color: #454545; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; word-wrap: break-word; line-height: 120%; font-size: 12px; ">
            <div align="center"><iframe name="google_ads_frame" width="" height="" frameborder="0" src="http://googleads.g.doubleclick.net/pagead/ads?client=undefined&amp;dt=1239759064331&amp;format=undefinedxundefined&amp;output=html&amp;correlator=1239759064331&amp;url=http%3A%2F%2Fwww.cnweblog.com%2Fnm1504%2Farchive%2F2007%2F09%2F17%2F252574.html&amp;ea=0&amp;ref=http%3A%2F%2Fwww.cnweblog.com%2Fnm1504%2FMyPosts.html%3Fpage%3D4&amp;frm=0&amp;ga_vid=311618793.1239758501&amp;ga_sid=1239758501&amp;ga_hid=1875952775&amp;ga_fc=true&amp;flash=8.0.22&amp;u_h=800&amp;u_w=1280&amp;u_ah=770&amp;u_aw=1280&amp;u_cd=32&amp;u_tz=480&amp;u_his=9&amp;u_java=true&amp;u_nplug=16&amp;u_nmime=68&amp;dtd=7" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no"></iframe></div>
            </td>
        </tr>
    </tbody>
</table>
<br />
<font color="#333333">&#160;<br />
&#160;&#160;/**&#160;&#160;<br />
&#160;&#160;&#160;*&#160;转换字节数组为16进制字串&#160;&#160;<br />
&#160;&#160;&#160;*&#160;@param&#160;b&#160;字节数组&#160;&#160;<br />
&#160;&#160;&#160;*&#160;@return&#160;16进制字串&#160;&#160;<br />
&#160;&#160;&#160;*/&#160;&#160;<br />
<br />
&#160;&#160;public&#160;static&#160;String&#160;byteArrayToHexString(byte[]&#160;b)&#160;{&#160;&#160;<br />
&#160;&#160;&#160;&#160;StringBuffer&#160;resultSb&#160;=&#160;new&#160;StringBuffer();&#160;&#160;<br />
&#160;&#160;&#160;&#160;for&#160;(int&#160;i&#160;=&#160;0;&#160;i&#160;&lt;&#160;b.length;&#160;i++)&#160;{&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;resultSb.append(byteToHexString(b[i]));&#160;&#160;<br />
&#160;&#160;&#160;&#160;}&#160;&#160;<br />
&#160;&#160;&#160;&#160;return&#160;resultSb.toString();&#160;&#160;<br />
&#160;&#160;}&#160;&#160;<br />
<br />
&#160;&#160;private&#160;static&#160;String&#160;byteToHexString(byte&#160;b)&#160;{&#160;&#160;<br />
&#160;&#160;&#160;&#160;int&#160;n&#160;=&#160;b;&#160;&#160;<br />
&#160;&#160;&#160;&#160;if&#160;(n&#160;&lt;&#160;0)&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;n&#160;=&#160;256&#160;+&#160;n;&#160;&#160;<br />
&#160;&#160;&#160;&#160;int&#160;d1&#160;=&#160;n&#160;/&#160;16;&#160;&#160;<br />
&#160;&#160;&#160;&#160;int&#160;d2&#160;=&#160;n&#160;%&#160;16;&#160;&#160;<br />
&#160;&#160;&#160;&#160;return&#160;hexDigits[d1]&#160;+&#160;hexDigits[d2];&#160;&#160;<br />
&#160;&#160;}&#160;&#160;<br />
<br />
&#160;&#160;public&#160;static&#160;String&#160;MD5Encode(String&#160;origin)&#160;{&#160;&#160;<br />
&#160;&#160;&#160;&#160;String&#160;resultString&#160;=&#160;null;&#160;&#160;<br />
<br />
&#160;&#160;&#160;&#160;try&#160;{&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;resultString=new&#160;String(origin);&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;MessageDigest&#160;md&#160;=&#160;MessageDigest.getInstance("MD5");&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;resultString=byteArrayToHexString(md.digest(resultString.getBytes()));&#160;&#160;<br />
&#160;&#160;&#160;&#160;}&#160;&#160;<br />
&#160;&#160;&#160;&#160;catch&#160;(Exception&#160;ex)&#160;{&#160;&#160;<br />
<br />
&#160;&#160;&#160;&#160;}&#160;&#160;<br />
&#160;&#160;&#160;&#160;return&#160;resultString;&#160;&#160;<br />
&#160;&#160;}&#160;&#160;<br />
<br />
&#160;&#160;public&#160;static&#160;void&#160;main(String[]&#160;args){&#160;&#160;<br />
&#160;&#160;&#160;&#160;System.err.println(MD5Encode("a"));&#160;&#160;<br />
&#160;&#160;}&#160;&#160;<br />
}&#160;&#160;<br />
<br />
<br />
在RFC&#160;1321中，给出了Test&#160;suite用来检验你的实现是否正确：&#160;<br />
<br />
MD5&#160;("")&#160;=&#160;d41d8cd98f00b204e9800998ecf8427e&#160;<br />
MD5&#160;("a")&#160;=&#160;0cc175b9c0f1b6a831c399e269772661&#160;<br />
MD5&#160;("abc")&#160;=&#160;900150983cd24fb0d6963f7d28e17f72&#160;<br />
MD5&#160;("message&#160;digest")&#160;=&#160;f96b697d7cb7938d525a2f31aaf161d0&#160;<br />
MD5&#160;("abcdefghijklmnopqrstuvwxyz")&#160;=&#160;c3fcd3d76192e4007dfb496cca67e13b&#160;</font></span>
<img src ="http://www.blogjava.net/1504/aggbug/265666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 09:32 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA四舍五入(小数点后保留两位数字)[自己总结]</title><link>http://www.blogjava.net/1504/archive/2009/04/15/265660.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Wed, 15 Apr 2009 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/04/15/265660.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/265660.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/04/15/265660.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/265660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/265660.html</trackback:ping><description><![CDATA[<span  style="color: #4b4b4b; font-family: Verdana; font-size: 13px; line-height: 19px; ">public String getFourToFive(double score_type)<br />
&#160;{<br />
&#160;&#160;double bl=(Math.round(score_type/.01)*.01);<br />
&#160;&#160;String st=String.valueOf(bl);<br />
&#160; /**注意,这里用.作为分隔符是失效的,不知道为什么,所以采用替换的办法*/<br />
&#160;&#160;st=st.replace(".", "_");<br />
&#160;&#160;String []st_arr=st.split("_");<br />
&#160;&#160;String temp="";<br />
&#160;&#160;if(st_arr[1].length()>2)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;temp=st_arr[1].substring(0, 2);<br />
&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;if(st_arr[1].length()&lt;2)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;temp=st_arr[1]+"0";<br />
&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;{<br />
&#160;&#160;&#160;temp=st_arr[1];<br />
&#160;&#160;}<br />
&#160;&#160;return st_arr[0]+"."+temp;<br />
&#160;}</span>
<img src ="http://www.blogjava.net/1504/aggbug/265660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-04-15 09:26 <a href="http://www.blogjava.net/1504/archive/2009/04/15/265660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的目录选择框和文件选择框【源】</title><link>http://www.blogjava.net/1504/archive/2009/02/09/253928.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Mon, 09 Feb 2009 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/02/09/253928.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/253928.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/02/09/253928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/253928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/253928.html</trackback:ping><description><![CDATA[1.目录选择框 &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; JFileChooser chooser=new JFileChooser(); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; int result=chooser.showOpenDialog(null); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; String fname=chooser.getName(chooser.getSelectedFile());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; System.out.println("fname---&gt;"+fname);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(result==JFileChooser.APPROVE_OPTION)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filePath=chooser.getSelectedFile().getPath();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("filePath---&gt;"+filePath);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(filePath.endsWith(".xml"))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; System.out.println("filePath---&gt;"+filePath);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />
Object[] options = { "OK", "CANCEL" };<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; int results= JOptionPane.showOptionDialog(null, "是否保存?", "Warning", <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(results==JOptionPane.OK_OPTION)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; doSave();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if(results==JOptionPane.NO_OPTION )<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doReturn();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
2.文件选择框<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.swing.JFileChooser chooser = new javax.swing.JFileChooser();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chooser.showOpenDialog(null);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fname=chooser.getName(chooser.getSelectedFile());<br />
<br />
<br />
<img src ="http://www.blogjava.net/1504/aggbug/253928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-02-09 17:17 <a href="http://www.blogjava.net/1504/archive/2009/02/09/253928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断数组中是否存在相同的数值</title><link>http://www.blogjava.net/1504/archive/2009/02/05/253364.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 05 Feb 2009 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/02/05/253364.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/253364.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/02/05/253364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/253364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/253364.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp; * &lt;p&gt;判断数组中是否存在相同的数值&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp; * @param arr<br />
&nbsp;&nbsp;&nbsp; &nbsp; * @return true:存在相同的 false:没有相同的<br />
&nbsp;&nbsp;&nbsp; &nbsp; */<br />
&nbsp;&nbsp;&nbsp; &nbsp;public boolean judgeOnly(String [] arr)<br />
&nbsp;&nbsp;&nbsp; &nbsp;{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Set&lt;String&gt; set = new HashSet&lt;String&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (String str : arr) <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.add(str);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (set.size() == arr.length) <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
<img src ="http://www.blogjava.net/1504/aggbug/253364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-02-05 11:48 <a href="http://www.blogjava.net/1504/archive/2009/02/05/253364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>