﻿<?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-少年阿宾-随笔分类-algorithm</title><link>http://www.blogjava.net/stevenjohn/category/53877.html</link><description>那些青春的岁月</description><language>zh-cn</language><lastBuildDate>Fri, 27 Mar 2015 19:03:45 GMT</lastBuildDate><pubDate>Fri, 27 Mar 2015 19:03:45 GMT</pubDate><ttl>60</ttl><item><title>二分查找时间复杂度的计算(转) </title><link>http://www.blogjava.net/stevenjohn/archive/2015/03/26/423859.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 26 Mar 2015 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/03/26/423859.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/423859.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/03/26/423859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/423859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/423859.html</trackback:ping><description><![CDATA[<p>二分查找的基本思想是将n个元素分成大致相等的两部分，去a[n/2]与x做比较，如果x=a[n/2],则找到x,算法中止；如果x&lt;a[n/2],则只要在数组a的左半部分继续搜索x,如果x&gt;a[n/2],则只要在数组a的右半部搜索x.</p><p>时间复杂度无非就是while循环的次数！</p><p>总共有n个元素，</p><p>渐渐跟下去就是n,n/2,n/4,....n/2^<span style="font-size: x-small;">k，其中k就是循环的次数</span></p><p><span style="font-size: x-small;">由于你n/2^k取整后&gt;=1</span></p><p><span style="font-size: x-small;">即令n/2^k=1</span></p><p><span style="font-size: x-small;">可得k=log<span style="font-family: Courier;">2n,（是以2为底，n的对数）</span></span></p><p><span style="font-family: Courier; font-size: x-small;">所以时间复杂度可以表示O()=O(logn)</span></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/423859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-03-26 16:30 <a href="http://www.blogjava.net/stevenjohn/archive/2015/03/26/423859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个长度相等的有序数组求中位数</title><link>http://www.blogjava.net/stevenjohn/archive/2014/11/17/420207.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Mon, 17 Nov 2014 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/11/17/420207.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/420207.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/11/17/420207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/420207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/420207.html</trackback:ping><description><![CDATA[<div>设x[1&#8230;n],y[1&#8230;n]为两个数组，每个包含n个已知的排好序的数，给出一个数组x和y中所有2n个元素的中位数，要求时间复杂度为O(lgN)<br /><br />这是算法导论上面的一道题目：<br /><br /><div>public class FindMedianTwoSortedArray {</div><div></div><div><span style="white-space:pre">	</span>public static int median(int[] arr1, int l1, int h1, int[] arr2, int l2, int h2)</div><div>&nbsp; &nbsp; {</div><div><span style="white-space:pre">		</span>System.out.println("-----------");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; int mid1 = (h1 + l1 ) / 2;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; int mid2 = (h2 + l2 ) / 2;</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (h1 - l1 == 1)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (Math.max(arr1[l1] , arr2[l2]) + Math.min(arr1[h1] , arr2[h2]))/2;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else if (arr1[mid1] &gt; arr2[mid2])</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return median(arr1, l1, mid1 , arr2, mid2 , h2); &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return median(arr1, mid1 , h1, arr2, l2 , mid2 ); &nbsp; &nbsp;</div><div>&nbsp; &nbsp; } &nbsp; &nbsp;&nbsp;</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] a = new int[]{0,1,2};</div><div><span style="white-space:pre">		</span>int[] b = new int[]{1,2,3};</div><div><span style="white-space:pre">		</span>int result = median(a, 0, a.length-1,b,0,b.length-1);</div><div><span style="white-space:pre">		</span>System.out.println(result);</div><div><span style="white-space:pre">	</span>}</div><div>}</div><br /><br /></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/420207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-11-17 21:47 <a href="http://www.blogjava.net/stevenjohn/archive/2014/11/17/420207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入排序(java)</title><link>http://www.blogjava.net/stevenjohn/archive/2014/10/19/418868.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Sat, 18 Oct 2014 17:20:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/10/19/418868.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/418868.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/10/19/418868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/418868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/418868.html</trackback:ping><description><![CDATA[<div>package com.abin.lee.algorithm.insert;</div><div></div><div>import java.util.Arrays;</div><div></div><div>public class InsertSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input = {6,1,4,2,5,8,3,7,9,0};</div><div><span style="white-space:pre">		</span>input = InsertSort.sort(input);</div><div><span style="white-space:pre">		</span>System.out.println(Arrays.toString(input));</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public static int[] sort(int[] input){</div><div><span style="white-space:pre">		</span>int temp = 0;</div><div><span style="white-space:pre">		</span>for(int i=0;i&lt;input.length;i++){</div><div><span style="white-space:pre">			</span>temp = input[i];</div><div><span style="white-space:pre">			</span>int j=i-1;</div><div><span style="white-space:pre">			</span>for(;j&gt;=0&amp;&amp;temp&lt;input[j];j--){</div><div><span style="white-space:pre">				</span>input[j+1] = input[j];</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>input[j+1] = temp;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return input;</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/418868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-10-19 01:20 <a href="http://www.blogjava.net/stevenjohn/archive/2014/10/19/418868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>归并排序(java)</title><link>http://www.blogjava.net/stevenjohn/archive/2014/10/17/418861.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 17 Oct 2014 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/10/17/418861.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/418861.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/10/17/418861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/418861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/418861.html</trackback:ping><description><![CDATA[<div>package com.abin.lee.algorithm.merge;</div><div><div></div><div>import java.util.Arrays;</div><div>/**</div><div>&nbsp;* 归并排序</div><div>&nbsp;*/</div><div>public class MergeSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input = {2,7,3,9,1,6,0,5,4,8};</div><div><span style="white-space:pre">		</span>MergeSort.sort(input, 0, input.length-1);</div><div><span style="white-space:pre">		</span>System.out.println("input="+Arrays.toString(input));</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>//首先分而自治</div><div><span style="white-space:pre">	</span> /**&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* 归并排序&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* 简介:将两个（或两个以上）有序表合并成一个新的有序表 即把待排序序列分为若干个子序列，每个子序列是有序的。然后再把有序子序列合并为整体有序序列&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* 时间复杂度为O(nlogn)&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* 稳定排序方式&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @param nums 待排序数组&nbsp;</div><div>&nbsp; &nbsp; &nbsp;* @return 输出有序数组&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*/ &nbsp;</div><div><span style="white-space:pre">	</span>public static int[] sort(int[] input,int low,int high){</div><div><span style="white-space:pre">		</span>int middle = (low+high)/2;</div><div><span style="white-space:pre">		</span>if(low&lt;high){</div><div><span style="white-space:pre">			</span>//左边</div><div><span style="white-space:pre">			</span>sort(input,low,middle);</div><div><span style="white-space:pre">			</span>//右边</div><div><span style="white-space:pre">			</span>sort(input,middle+1,high);</div><div><span style="white-space:pre">			</span>//左右归并</div><div><span style="white-space:pre">			</span>merge(input,low,high,middle);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return input;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public static void merge(int[] input,int low,int high,int middle){</div><div><span style="white-space:pre">		</span>int[] temp = new int[high-low+1];</div><div><span style="white-space:pre">		</span>int i = low;//左指针</div><div><span style="white-space:pre">		</span>int j = middle+1;//右指针</div><div><span style="white-space:pre">		</span>int k=0;</div><div><span style="white-space:pre">		</span>// 把较小的数先移到新数组中 &nbsp;</div><div><span style="white-space:pre">		</span>while(i&lt;=middle&amp;&amp;j&lt;=high){</div><div><span style="white-space:pre">			</span>if(input[i]&lt;input[j]){</div><div><span style="white-space:pre">				</span>temp[k++] = input[i++];</div><div><span style="white-space:pre">			</span>}else{</div><div><span style="white-space:pre">				</span>temp[k++] = input[j++];</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>// 把左边剩余的数移入数组 &nbsp;</div><div><span style="white-space:pre">		</span>while(i&lt;=middle){</div><div><span style="white-space:pre">			</span>temp[k++] = input[i++];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>// 把右边边剩余的数移入数组 &nbsp;</div><div><span style="white-space:pre">		</span>while(j&lt;=high){</div><div><span style="white-space:pre">			</span>temp[k++] = input[j++];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span> // 把新数组中的数覆盖input数组 &nbsp;</div><div><span style="white-space:pre">		</span>for(int m=0;m&lt;temp.length;m++){</div><div><span style="white-space:pre">			</span>input[m+low] = temp[m];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div>}</div><div></div></div><div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/418861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-10-17 18:31 <a href="http://www.blogjava.net/stevenjohn/archive/2014/10/17/418861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二分查找法(java)</title><link>http://www.blogjava.net/stevenjohn/archive/2014/10/11/418605.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 10 Oct 2014 16:03:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/10/11/418605.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/418605.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/10/11/418605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/418605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/418605.html</trackback:ping><description><![CDATA[<div>//递归性<br />package com.abin.lee.algorithm.binary;</div><div></div><div>public class BinarySearch {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input = new int[]{2,3,4,5,6,7,8,9};&nbsp;</div><div><span style="white-space:pre">		</span>int result = search(input, 5, 0, input.length-1);</div><div><span style="white-space:pre">		</span>System.out.println("result="+result);</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public static int search(int[] input,int data,int low,int high){</div><div><span style="white-space:pre">		</span>int middle = (low+high)/2;</div><div><span style="white-space:pre">		</span>if(data == input[middle]){</div><div><span style="white-space:pre">			</span>return middle;</div><div><span style="white-space:pre">		</span>}else if(data &gt; input[middle]){</div><div><span style="white-space:pre">			</span>return search(input, data, middle+1, high);</div><div><span style="white-space:pre">		</span>}else if(data &lt; input[middle]){</div><div><span style="white-space:pre">			</span>return search(input, data, low, middle-1);</div><div><span style="white-space:pre">		</span>}else{</div><div><span style="white-space:pre">			</span>return -1;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div></div><div>}<br /><br /><br />//while循环型<br /><div>public static int binary(int[] input,int low,int high,int target){</div><div><span style="white-space:pre">		</span>while(low &lt;= high){</div><div><span style="white-space:pre">			</span>int middle = (low+high)/2;</div><div><span style="white-space:pre">			</span>if(input[middle]&gt;target){</div><div><span style="white-space:pre">				</span>high = middle-1;</div><div><span style="white-space:pre">			</span>}else if(input[middle]&lt;target){</div><div><span style="white-space:pre">				</span>low = middle+1;</div><div><span style="white-space:pre">			</span>}else{</div><div><span style="white-space:pre">				</span>return middle;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return -1;</div><div><span style="white-space:pre">	</span>}</div></div><div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/418605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-10-11 00:03 <a href="http://www.blogjava.net/stevenjohn/archive/2014/10/11/418605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序(java)</title><link>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418603.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 10 Oct 2014 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418603.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/418603.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/418603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/418603.html</trackback:ping><description><![CDATA[<div>package com.abin.lee.algorithm.fast;</div><div></div><div>public class SpeedSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input = new int[]{1,6,3,5,2,4};</div><div><span style="white-space:pre">		</span>quickSort(input, 0, input.length-1);</div><div><span style="white-space:pre">		</span>for(int i=0;i&lt;input.length;i++){</div><div><span style="white-space:pre">			</span>System.out.println("input["+i+"]="+input[i]);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>//分为参照物的大小两组</div><div><span style="white-space:pre">	</span>public static int getMiddle(int[] input,int low,int high){</div><div><span style="white-space:pre">		</span>int temp = input[low];</div><div><span style="white-space:pre">		</span>while(low&lt;high){</div><div><span style="white-space:pre">			</span>while(low&lt;high &amp;&amp; input[high]&gt;temp){</div><div><span style="white-space:pre">				</span>high--;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>input[low]=input[high];</div><div><span style="white-space:pre">			</span>while(low&lt;high &amp;&amp; input[low]&lt;temp){</div><div><span style="white-space:pre">				</span>low++;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>input[high]=input[low];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>input[low]=temp;</div><div><span style="white-space:pre">		</span>return low;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>//分而自治</div><div><span style="white-space:pre">	</span>public static void quickSort(int[] input,int low,int high){</div><div><span style="white-space:pre">		</span>if(low&lt;high){</div><div><span style="white-space:pre">			</span>int middle = getMiddle(input, low, high);</div><div><span style="white-space:pre">			</span>quickSort(input,low,middle-1);</div><div><span style="white-space:pre">			</span>quickSort(input,middle+1,high);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div></div><div>}<br /><br /><br /><p><span style="font-size:16px"><span style="background-color:#ffff66">快速排序&nbsp;</span>对冒泡排序的一种改进，若初始记录序列按关键字有序或基本有序，蜕化为冒泡排序。使用的是递归原理，在所有同<u>数量级O(n longn)</u> 的排序方法中，其平均性能最好。就平均时间而言，是目前被认为最好的一种<u>内部排序方法</u><br /> <span style="color:#333333"><span style="line-height:26px"><span style="background-color:#ffff66">基本思想</span>是：通过一躺排序将要排序的数据分割成独立的两部分，其中一部分的所有数据都比另外一部分的所有数据都要小，然后再按此方法对这两部分数据分别进行快速排序，整个排序过程可以递归进行，以此达到整个数据变成有序序列。<br /> <span style="background-color:#ffff66">三个指针:&nbsp;</span>第一个指针称为pivotkey指针（枢轴），第二个指针和第三个指针分别为left指针和right指针，分别指向最左边的值和最右边的值。left指针和right指针从两边同时向中间逼近，在逼近的过程中不停的与枢轴比较，将比枢轴小的元素移到低端，将比枢轴大的元素移到高端，枢轴选定后永远不变，最终在中间，前小后大。<br /> </span></span></span></p> <p><span style="font-size:16px"><span style="background-color:#ffff66">需要两个函数：</span><br /> </span></p> <blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"> <p><span style="font-size:16px">&#9312; 递归函数 &nbsp;public static void quickSort(int[]n ,int left,int right)<br /> &#9313; 分割函数（一趟快速排序函数）&nbsp;public static int partition(int[]n ,int left,int right)<br /> </span></p> </blockquote> <p><span style="font-size:16px"><span style="background-color:#ffff66">JAVA源代码（成功运行）</span>：<br /><br /><br /><br /></span></p><div><font size="3">package testSortAlgorithm;</font></div><div></div><div>public class QuickSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int [] array = {49,38,65,97,76,13,27};</div><div><span style="white-space:pre">		</span>quickSort(array, 0, array.length - 1);</div><div><span style="white-space:pre">		</span>for (int i = 0; i &lt; array.length; i++) {</div><div><span style="white-space:pre">			</span>System.out.println(array[i]);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>/*先按照数组为数据原型写出算法，再写出扩展性算法。数组{49,38,65,97,76,13,27}</div><div><span style="white-space:pre">	</span> * */</div><div><span style="white-space:pre">	</span>public static void quickSort(int[]n ,int left,int right){</div><div><span style="white-space:pre">		</span>int pivot;</div><div><span style="white-space:pre">		</span>if (left &lt; right) {</div><div><span style="white-space:pre">			</span>//pivot作为枢轴，较之小的元素在左，较之大的元素在右</div><div><span style="white-space:pre">			</span>pivot = partition(n, left, right);</div><div><span style="white-space:pre">			</span>//对左右数组递归调用快速排序，直到顺序完全正确</div><div><span style="white-space:pre">			</span>quickSort(n, left, pivot - 1);</div><div><span style="white-space:pre">			</span>quickSort(n, pivot + 1, right);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static int partition(int[]n ,int left,int right){</div><div><span style="white-space:pre">		</span>int pivotkey = n[left];</div><div><span style="white-space:pre">		</span>//枢轴选定后永远不变，最终在中间，前小后大</div><div><span style="white-space:pre">		</span>while (left &lt; right) {</div><div><span style="white-space:pre">			</span>while (left &lt; right &amp;&amp; n[right] &gt;= pivotkey) --right;</div><div><span style="white-space:pre">			</span>//将比枢轴小的元素移到低端，此时right位相当于空，等待低位比pivotkey大的数补上</div><div><span style="white-space:pre">			</span>n[left] = n[right];</div><div><span style="white-space:pre">			</span>while (left &lt; right &amp;&amp; n[left] &lt;= pivotkey) ++left;</div><div><span style="white-space:pre">			</span>//将比枢轴大的元素移到高端，此时left位相当于空，等待高位比pivotkey小的数补上</div><div><span style="white-space:pre">			</span>n[right] = n[left];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>//当left == right，完成一趟快速排序，此时left位相当于空，等待pivotkey补上</div><div><span style="white-space:pre">		</span>n[left] = pivotkey;</div><div><span style="white-space:pre">		</span>return left;</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div><p><span style="font-size:16px"><br /><br /><br /></span></p></div><div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/418603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-10-10 23:43 <a href="http://www.blogjava.net/stevenjohn/archive/2014/10/10/418603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单链表的实现(java)</title><link>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418602.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 10 Oct 2014 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418602.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/418602.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2014/10/10/418602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/418602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/418602.html</trackback:ping><description><![CDATA[<div>package com.abin.lee.list.test;</div><div></div><div>public class SingleList {</div><div><span style="white-space:pre">	</span>private Object obj;</div><div><span style="white-space:pre">	</span>private transient SingleList singleList;</div><div><span style="white-space:pre">	</span>private SingleList next;</div><div><span style="white-space:pre">	</span>private SingleList pre;</div><div><span style="white-space:pre">	</span>private transient int size;</div><div><span style="white-space:pre">	</span>public SingleList() {</div><div><span style="white-space:pre">		</span>singleList = new SingleList(null,null,null);</div><div><span style="white-space:pre">		</span>singleList.next = singleList.pre = singleList;</div><div><span style="white-space:pre">		</span>size=0;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public SingleList(Object obj,SingleList next,SingleList pre) {</div><div><span style="white-space:pre">		</span>this.obj=obj;</div><div><span style="white-space:pre">		</span>this.next=next;</div><div><span style="white-space:pre">		</span>this.pre=pre;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void add(Object obj){</div><div><span style="white-space:pre">		</span>SingleList current = new SingleList(obj,singleList,singleList.pre);</div><div><span style="white-space:pre">		</span>current.next.pre = current;</div><div><span style="white-space:pre">		</span>current.pre.next = current;</div><div><span style="white-space:pre">		</span>size++;</div><div><span style="white-space:pre">		</span>singleList = current;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public int size(){</div><div><span style="white-space:pre">		</span>return size;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public Object get(int index){</div><div><span style="white-space:pre">		</span>SingleList current = singleList.next;</div><div><span style="white-space:pre">		</span>for(int i=0;i&lt;index;i++){</div><div><span style="white-space:pre">			</span>current = current.next;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return current.obj;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>SingleList single = new SingleList();</div><div><span style="white-space:pre">		</span>for(int i=0;i&lt;5;i++){</div><div><span style="white-space:pre">			</span>single.add("abin"+i);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>System.out.println("single="+single);</div><div><span style="white-space:pre">		</span>int size = single.size();</div><div><span style="white-space:pre">		</span>System.out.println("size="+size);</div><div><span style="white-space:pre">		</span>Object element = single.get(0);</div><div><span style="white-space:pre">		</span>System.out.println("element="+element);</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div></div><div>}</div><div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/418602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2014-10-10 22:46 <a href="http://www.blogjava.net/stevenjohn/archive/2014/10/10/418602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java  常常被问到的算法</title><link>http://www.blogjava.net/stevenjohn/archive/2013/09/24/404354.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Tue, 24 Sep 2013 00:50:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/09/24/404354.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/404354.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/09/24/404354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/404354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/404354.html</trackback:ping><description><![CDATA[<div>&nbsp;二叉树相关的问的比较多<br />二分查找<br />treemap和某些数据库索引的的底层是红黑树<br />链表的相交和闭环<br /><div>&nbsp;针对二叉树，比如分层遍历，找最近父节点<br />在字符串中找回文串，数组中寻找重复的数字或相邻之和的最大串<br /><div>&nbsp;红黑树不就是B树么</div><div>&nbsp;如果没有遇到专业考算法的公司，只能说还没面试过牛公司，就相当于编程感觉不到数据结构，相当于编程还没入门</div><div>&nbsp;是对称二叉B树<br />还是有点不一样，是其子集，误导你了</div></div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/404354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-09-24 08:50 <a href="http://www.blogjava.net/stevenjohn/archive/2013/09/24/404354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 排序算法有多少种</title><link>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403727.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 05 Sep 2013 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403727.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/403727.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/403727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/403727.html</trackback:ping><description><![CDATA[语言只是把具体的算法实现出来而已。据我了解的排序算法11-13种。排序算法嘛 主要就是个思想而已。不同的算法时间复杂度不一样，空间复杂度也不一样，当然执行的效率也不一样。当然采用哪种算法还取决于你要实现什么样的功能。就好比说：要同时尽快的找出最大最小，或者尽快的找出最值的位置等等。<br />冒泡排序（bubble sort） &#8212; O(n2) <br />鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) &#8212; O(n2) <br />插入排序 （insertion sort）&#8212; O(n2) <br />桶排序 （bucket sort）&#8212; O(n); 需要 O(k) 额外 记忆体 <br />计数排序 (counting sort) &#8212; O(n+k); 需要 O(n+k) 额外 记忆体 <br />归并排序 （merge sort）&#8212; O(n log n); 需要 O(n) 额外记忆体 <br />原地归并排序 &#8212; O(n2) <br />二叉树排序 （Binary tree sort） &#8212; O(n log n); 需要 O(n) 额外记忆体 <br />鸽巢排序 (Pigeonhole sort) &#8212; O(n+k); 需要 O(k) 额外记忆体 <br />基数排序 （radix sort）&#8212; O(n&#183;k); 需要 O(n) 额外记忆体 <br />Gnome sort &#8212; O(n2) <br />Library sort &#8212; O(n log n) with high probability, 需要 (1+&#949;)n 额外记忆体不稳定<br />选择排序 （selection sort）&#8212; O(n2) <br />希尔排序 （shell sort）&#8212; O(n log n) 如果使用最佳的现在版本 <br />Comb sort &#8212; O(n log n) <br />堆排序 （heapsort）&#8212; O(n log n) <br />Smoothsort &#8212; O(n log n) <br />快速排序 （quicksort）&#8212; O(n log n) 期望时间, O(n2) 最坏情况; 对於大的、乱数串列一般相信是最快的已知排序 <img src ="http://www.blogjava.net/stevenjohn/aggbug/403727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-09-05 19:49 <a href="http://www.blogjava.net/stevenjohn/archive/2013/09/05/403727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 常用算法</title><link>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403717.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Thu, 05 Sep 2013 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403717.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/403717.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2013/09/05/403717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/403717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/403717.html</trackback:ping><description><![CDATA[<div>1、冒泡排序：<br />冒泡排序（BubbleSort）的基本概念是：依次比较相邻的两个数，将小数放在前面，大数放在后面。即在第一趟：首先比较第1个和第2个数，将小数放前，大数放后。然后比较第2个数和第3个数，将小数放前，大数放后，如此继续，直至比较最后两个数，将小数放前，大数放后。至此第一趟结束，将最大的数放到了最后。在第二趟：仍从第一对数开始比较（因为可能由于第2个数和第3个数的交换，使得第1个数不再小于第2个数），将小数放前，大数放后，一直比较到倒数第二个数（倒数第一的位置上已经是最大的），第二趟结束，在倒数第二的位置上得到一个新的最大数（其实在整个数列中是第二大的数）。如此下去，重复以上过程，直至最终完成排序。 <br /><br />具体代码例一：<br />
<p>package com.abin.lee.algorithm.bubble;</p>
<p>public class BubbleSort {<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;int[] start={5,2,1,3,6,4};<br />&nbsp;&nbsp;int[] end=sort(start);<br />&nbsp;&nbsp;for(int i=0;i&lt;end.length;i++){<br />&nbsp;&nbsp;&nbsp;System.out.println("end["+i+"]="+end[i]);<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;<br />&nbsp;public static int[] sort(int[] input){<br />&nbsp;&nbsp;int temp=0;<br /></p><div>&nbsp; //最多做n-1趟排序</div>&nbsp;&nbsp;for(int i=0;i&lt;input.length-1;i++){<br />&nbsp; &nbsp;&nbsp;//对当前无序区间score[0......length-i-1]进行排序(j的范围很关键，这个范围是在逐步缩小的)<br />&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;input.length-i-1;j++){<br />&nbsp; &nbsp;&nbsp;//把大的值交换到后面<br />&nbsp;&nbsp;&nbsp;&nbsp;if(input[j]&gt;input[j+1]){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=input[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[j]=input[j+1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[j+1]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer stb=new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(int k=0;k&lt;input.length;k++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stb.append("input["+k+"]="+input[k]+" ");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("i="+i+",j="+j+" = "+stb.toString());<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return input;<br />&nbsp;}<p>&nbsp;</p>
<p>}<br /></p><br />2、选择排序：<br />选择排序(Straight Select Sorting) 也是一种简单的排序方法，它的基本思想是：第一次从R[0]~R[n-1]中选取最小值，与R[0]交换，第二次从R{1}~R[n-1]中选取最小值，与R[1]交换，....，&nbsp;&nbsp; 第i次从R[i-1]~R[n-1]中选取最小值，与R[i-1]交换，.....，第n-1次从R[n-2]~R[n-1]中选取最小值，与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列. <br />具体代码：<br />
<p>package com.abin.lee.algorithm.select;</p>
<p>public class SelectSort {<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;int[] start={5,2,3,1,6,4};<br />&nbsp;&nbsp;start=sort(start);<br />&nbsp;&nbsp;for(int i=0;i&lt;start.length;i++){<br />&nbsp;&nbsp;&nbsp;System.out.println("start["+i+"]="+start[i]);<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;public static int[] sort(int[] input){<br />&nbsp;&nbsp;int temp=0;<br />&nbsp;&nbsp;for(int i=0;i&lt;input.length;i++){<br />&nbsp;&nbsp;&nbsp;for(int j=i+1;j&lt;input.length;j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(input[i]&gt;input[j]){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=input[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[i]=input[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[j]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer stb=new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(int k=0;k&lt;input.length;k++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stb.append("input["+k+"]="+input[k]+" ");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("i="+i+",j="+j+" = "+stb.toString());<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return input;<br />&nbsp;}<br />}<br /></p><br /><br /><br />3、请输入一个数字，比如4，输出为：<br />1 <br />2 3 <br />4 5 6 <br />7 8 9 10 <br /><br />代码如下：<br />
<p>package com.abin.lee.photo;</p>
<p>public class TestInputNumber {<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;int n=4;<br />&nbsp;&nbsp;output(n);<br />&nbsp;}<br />&nbsp;public static void output(int n){<br />&nbsp;&nbsp;int temp=1;<br />&nbsp;&nbsp;for(int i=1;i&lt;=n;i++){<br />&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;i;j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(temp+" ");<br />&nbsp;&nbsp;&nbsp;&nbsp;temp++;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;System.out.println("");<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;}<br />}<br /><br /><br />4.二叉树算法<br /></p>
<p>package com.abin.lee.algorithm.binary;</p>
<p>public class BinaryNode {<br />&nbsp;public int data;//根节点<br />&nbsp;BinaryNode left;//左节点<br />&nbsp;BinaryNode right;//右节点<br />&nbsp;<br />&nbsp;public BinaryNode(int data,BinaryNode left,BinaryNode right) {<br />&nbsp;&nbsp;this.data=data;<br />&nbsp;&nbsp;this.left=left;<br />&nbsp;&nbsp;this.right=right;<br />&nbsp;}<br />&nbsp;<br />&nbsp;public int getData() {<br />&nbsp;&nbsp;return data;<br />&nbsp;}<br />&nbsp;public void setData(int data) {<br />&nbsp;&nbsp;this.data = data;<br />&nbsp;}<br />&nbsp;public BinaryNode getLeft() {<br />&nbsp;&nbsp;return left;<br />&nbsp;}<br />&nbsp;public void setLeft(BinaryNode left) {<br />&nbsp;&nbsp;this.left = left;<br />&nbsp;}<br />&nbsp;public BinaryNode getRight() {<br />&nbsp;&nbsp;return right;<br />&nbsp;}<br />&nbsp;public void setRight(BinaryNode right) {<br />&nbsp;&nbsp;this.right = right;<br />&nbsp;}<br />}<br /></p>
<p><br /><br /><br /></p>
<p>package com.abin.lee.algorithm.binary;</p>
<p>public class BinaryTree {<br />&nbsp;//前序遍历<br />&nbsp;public static void preOrder(BinaryNode root){<br />&nbsp;&nbsp;if(null!=root){<br />&nbsp;&nbsp;&nbsp;System.out.print(root.data+"-");<br />&nbsp;&nbsp;&nbsp;preOrder(root.left);<br />&nbsp;&nbsp;&nbsp;preOrder(root.right);<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;//中序遍历<br />&nbsp;public static void inOrder(BinaryNode root){<br />&nbsp;&nbsp;if(null!=root){<br />&nbsp;&nbsp;&nbsp;inOrder(root.left);<br />&nbsp;&nbsp;&nbsp;System.out.print(root.data+"--");<br />&nbsp;&nbsp;&nbsp;inOrder(root.right);<br />&nbsp;&nbsp;}<br />&nbsp;} <br />&nbsp;//后序遍历<br />&nbsp;public static void postOrder(BinaryNode root){<br />&nbsp;&nbsp;if(null!=root){<br />&nbsp;&nbsp;&nbsp;postOrder(root.left);<br />&nbsp;&nbsp;&nbsp;postOrder(root.right);<br />&nbsp;&nbsp;&nbsp;System.out.print(root.data+"---");<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;BinaryNode one=new BinaryNode(1,null,null);<br />&nbsp;&nbsp;BinaryNode three=new BinaryNode(3,null,null);<br />&nbsp;&nbsp;BinaryNode two=new BinaryNode(2,three,one);<br />&nbsp;&nbsp;BinaryNode four=new BinaryNode(4,one,two);<br />&nbsp;&nbsp;BinaryNode five=new BinaryNode(5,four,one);<br />&nbsp;&nbsp;System.out.println("preOrder");<br />&nbsp;&nbsp;preOrder(five);<br />&nbsp;&nbsp;System.out.println();<br />&nbsp;&nbsp;System.out.println("inOrder");<br />&nbsp;&nbsp;inOrder(five);<br />&nbsp;&nbsp;System.out.println();<br />&nbsp;&nbsp;System.out.println("postOrder");<br />&nbsp;&nbsp;postOrder(five);<br />&nbsp;&nbsp;System.out.println();<br />&nbsp;&nbsp;<br />&nbsp;}</p>
<p>}<br /></p>
<p><br />输出结果：<br />preOrder<br />5-4-1-2-3-1-1-<br />inOrder<br />1--4--3--2--1--5--1--<br />postOrder<br />1---3---1---2---4---1---5---<br /><br /><br /><br /><br />5、java插入排序<br /></p><p style="margin: 0pt 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;"><span style="font-size: 16px; font-family: 微软雅黑;">插入式排序法&#8212;&#8212;插入排序法</span></p><p style="margin: 0pt 0px; padding: 0px; color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;"><span style="font-size: 16px; font-family: 微软雅黑;">插入排序（Insertion&nbsp;</span><span style="font-size: 16px; font-family: 微软雅黑;">Sortion</span><span style="font-size: 16px; font-family: 微软雅黑;">）的基本思想是：把</span><span style="font-size: 16px; font-family: 微软雅黑;">n</span><span style="font-size: 16px; font-family: 微软雅黑;">个待排序的元素看成一个有序表和一个无序表，开始有序表只包含一个元素，无序表中包含n-1个元素，排序过程中每次从无序表中取出第一个元素，把它的排序码依次与有序表元素的排序码进行比较，将它插入到有序表中的适当位置，使之成为新的有序表。</span></p><br /><pre id="best-content-889789486" accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; color: #333333; line-height: 24px; background-color: #f1fedd;">public class InjectionSort  //定义一个 InjectionSort 类<br />public static void injectionSort(int[] number) //传数组<br />for(int j = 1;j&lt;number.length;j++)//循环<br />int tmp = number[j];  //循环把数组第二个值放到tmp里<br />int i = j-1//给i 赋值<br />while(tmp&lt;number[i])  //tmp值和数组第一个值比较谁小<br />number[i+1] = number[i];  //如果小于就把第一个值赋值给第二个<br />i--;<br />if(i == -1)//如果i值=-1<br />break;   //退出循环<br />number[i+1] = tmp //因为比较数组里的前一个比后一个这样就换交了实现了把小的放在前面<br />这是第一次，因为循环是一个数组，后边的就一次往下循环，最后就把数组里的顺序从小到大排序了<br />public static void main(String[] args){  <br />		int[] num = {5,46,26,67,2,35};//定义数组num<br />		injectionSort(num);//调用方法<br />		for(int i = 0;i&lt;num.length;i++){<br />			System.out.println(num[i]);//显示排序后的数组，一行显示一个值<br /><br />简单说就是数组里第二个和第一个比谁小，把小的放到第一个里，大的放到第二个里，然后第二个再和第三个比，小的还是放在前，一直比到这个数组结束，这样就实现了从小到大，希望我说的够详细</pre><br /><br />插入排序代码while循环：<br /><div><div>package com.abin.lee.algorithm.insert;</div><div></div><div>public class InsertSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };</div><div><span style="white-space:pre">		</span>input=sort(input);</div><div><span style="white-space:pre">		</span>for (int i = 0; i &lt; input.length; i++) {</div><div><span style="white-space:pre">			</span>System.out.print(input[i] + " &nbsp;");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>public static int[] sort(int[] input) {</div><div><span style="white-space:pre">		</span>for (int i = 1; i &lt; input.length; i++) {</div><div><span style="white-space:pre">			</span>int insertVal = input[i];</div><div><span style="white-space:pre">			</span>// insertValue准备和前一个数比较</div><div><span style="white-space:pre">			</span>int index = i - 1;</div><div><span style="white-space:pre">			</span>while (index &gt;= 0 &amp;&amp; insertVal &lt; input[index]) {</div><div><span style="white-space:pre">				</span>// 将把input[index]向后移动</div><div><span style="white-space:pre">				</span>input[index + 1] = input[index];</div><div><span style="white-space:pre">				</span>// 让index向前移动一位</div><div><span style="white-space:pre">				</span>index--;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>// 将insertValue插入到适当位置</div><div><span style="white-space:pre">			</span>input[index + 1] = insertVal;</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>//下面这个循环是为了打印一下中间的循环看看是不是插入排序的正确算法</div><div><span style="white-space:pre">			</span>StringBuffer stb=new StringBuffer();</div><div><span style="white-space:pre">			</span>for(int k=0;k&lt;input.length;k++){</div><div><span style="white-space:pre">				</span>stb.append(input[k]+" ");</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>System.out.println("i="+i+" = "+stb.toString());</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return input;</div><div><span style="white-space:pre">	</span>}</div><div></div><div>}</div></div><div></div><br /><br />插入排序for循环代码：<br /><br /><div><div>package com.abin.lee.algorithm.insert;</div><div></div><div>public class DoInsertSort {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int[] input={5,4,6,3,7,2,8,1,0,9};</div><div><span style="white-space:pre">		</span>input=sort(input);</div><div><span style="white-space:pre">		</span>for(int i=0;i&lt;input.length;i++){</div><div><span style="white-space:pre">			</span>System.out.print("input["+i+"]="+input[i]+" ");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static int[] sort(int[] input){</div><div><span style="white-space:pre">		</span>for(int i=1;i&lt;input.length;i++){</div><div><span style="white-space:pre">			</span>int temp=input[i];</div><div><span style="white-space:pre">			</span>int j;</div><div><span style="white-space:pre">			</span>for(j=i;j&gt;0;j--){</div><div><span style="white-space:pre">				</span>if(temp&lt;input[j-1]){</div><div><span style="white-space:pre">					</span>input[j]=input[j-1];</div><div><span style="white-space:pre">				</span>}else{</div><div><span style="white-space:pre">					</span>break;</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>input[j]=temp;</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>//下面这个循环是为了打印一下中间的循环看看是不是插入排序的正确算法</div><div><span style="white-space:pre">			</span>StringBuffer stb=new StringBuffer();</div><div><span style="white-space:pre">			</span>for(int k=0;k&lt;input.length;k++){</div><div><span style="white-space:pre">				</span>stb.append(input[k]+" ");</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>System.out.println("i="+i+" = "+stb.toString());</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>return input;</div><div><span style="white-space:pre">	</span>}</div><div>}</div></div><div></div><br /><br /><p>&nbsp;<div style="display: inline-block; "></div><span class="Apple-style-span" style="background-color: #ffffff; "><p style="font-family: 'Courier New', Tahoma, Verdana, 宋体, 微软雅黑; font-size: 16px; line-height: 28px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; ">二分查找又称折半查找，它是一种效率较高的查找方法。</p><p style="margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-indent: 2em; "><font class="Apple-style-span" face="'Courier New', Tahoma, Verdana, 宋体, 微软雅黑" size="3"><span class="Apple-style-span" style="line-height: 28px;">折半查找的算法思想是将数列按有序化(递增或递减)排列，查找过程中采用跳跃式方式查找，即先以有序数列的中点位置为比较对象，如果要找的元素值小于该中点元素，则将待查序列缩小为左半部分，否则为右半部分。通过一次比较，将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数，提高查找效率。但是，折半查找的先决条件是查找表中的数据元素必须有序。</span></font><br /><div><div><span style="line-height: 28px;">package com.abin.algorithm.template.half;</span></div><div><span style="line-height: 28px;"><br /></span></div><div><span style="line-height: 28px;">public class BinarySearch {</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>public static void main(String[] args) {</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int[] src=new int[]{1,3,5,7,9,11};</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int result=binarySearch(src, 3);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>System.out.println("result="+result);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int status=binarySearch(src, 9 ,0 ,src.length);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>System.out.println("status="+status);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>//循环实现</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>public static int binarySearch(int[] src,int key){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int low=0;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int high=src.length-1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>while(low&lt;=high){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>int middle=(low+high)/2;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>if(key==src[middle]){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">				</span>return middle;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>}else if(key&lt;src[middle]){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">				</span>high=middle-1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>}else{</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">				</span>low=middle+1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>}</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>}</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>return -1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>//递归实现</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>public static int binarySearch(int[] src,int key,int low,int high){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>int middle=(low+high)/2;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>if(src[middle]==key){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>return middle;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>}else if(low&gt;=high){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>return -1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>}else if(src[middle]&gt;key){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>return binarySearch(src, key, low, middle-1);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>}else if(src[middle]&lt;key){</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">			</span>return binarySearch(src, key, middle+1, high);</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>}</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">		</span>return -1;</span></div><div><span style="line-height: 28px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 28px;"><br /></span></div><div><span style="line-height: 28px;">}</span></div></div><div style="font-family: 'Courier New', Tahoma, Verdana, 宋体, 微软雅黑; font-size: 16px; line-height: 28px; "></div><br /><br /></p></span></p></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/403717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2013-09-05 16:27 <a href="http://www.blogjava.net/stevenjohn/archive/2013/09/05/403717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>