<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post/5484/</link>
<title><![CDATA[[实践OK]传说中的冒泡排序法在PHP中实现及排序原理描述。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Fri, 10 Aug 2012 15:42:25 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/5484/</guid> 
<description>
<![CDATA[ 
	背景：在很多PHP面试上会给一些冒泡排序、或不说是冒泡排序，而说是自己实现一个按顺序排序，其实更高效呢需要更多时间写代码及思考，往往冒泡排序是最容易考察一个人对php也好，c的指针也好的一个驾驭以能力。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经典的冒泡排序法一直是许多程序沿用的其中一种排序法，话说冒泡排序法在效率上比PHP系统函数sort更高效。本章不讨论性能，所以就不拿它来跟系统性能做对比了。<br/><br/><br/>我写了一个，其原理，就是无论给一个什么样的数组，其输入这个排序函数，就给按数组下标小的值小在前面，而大的给放后面，也就是相当于一个瓶子里的气泡，轻的下沉，重的上浮，这个用语言讲出来还真不太好讲：<br/>1）对于由a[0],a[1],a[2],a[3]....a[n-2],a[n-1]，n个数组，通整个数组进行扫描（挨个扫：下标：0，1一组，1，2一组...，一组发现数组下标小的值且大的则交换），一直这样交换下去会发现：<br/>（1）最大的那个经过一次扫描就沉到最下面了。<br/>（2）最下面那个下一次不用再扫一次了，省一次比对。<br/>&nbsp;&nbsp;(3)根据2，对上面操作再扫一次，则这个倒数第二重的那个气泡也就排好了。<br/>....依次类推，直至最上面两个数是最后一次，也就全排好了。（这个就是外层的一个：i最大，i--，因为内层一次后，最大那个已经到最下面了，于是，i--也就不用再扫它了）<br/>12,45,28,30,88,67<br/>第一次：12，28，30，45，67，88 //左右相邻比对，小下标大数值的往后挪<br/>第二次：12，28，30，45，67，88 //这个其实一次就排好了，有些不规则的不止一次<br/>.....<br/>第N-1次 也就到了0,1两个下标的比对调整下位置，也就算排完了这个冒泡，确保正确。<br/><br/><br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
echo &quot;冒泡排序学习之PHP版本：&quot;;
function maopao($arr)&#123;
&nbsp;&nbsp;echo &quot;Helo&quot;;
&nbsp;&nbsp;for($i=count($arr);$i&gt;=0;$i--)&#123;//这个是数组下标大值就大也就是下沉在下面，i由最大慢慢减小。
&nbsp;&nbsp;&nbsp;&nbsp;for($j=0;$j&lt;$i-1;$j++)&#123;//数组长度为7，则key最大6，所以是小于不等于,因为下面还要j+1，为此，还得-1。伴随上面$i值的变小，最下面一个就不用比了，依次类推。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($arr[$j]&gt;$arr[$j+1])&#123;//如果相邻比较发现小编号的值更大，则交换俩值，让它下沉到大编号端。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//echo &quot;j=&quot;.$arr[$j].&quot;j+1=&quot;.$arr[$j+1].&quot;&#92;n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp = $arr[$j];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr[$j] = $arr[$j+1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr[$j+1] = $tmp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;return $arr;//必须return，否则无值打印出来
&nbsp;&nbsp;&#125;
&#125;

$arr = array (12,45,28,30,88,67);
print_r($arr);
print_r(maopao($arr));


</textarea><br/><br/><br/>---------- 调试PHP ----------<br/>冒泡排序学习之PHP版本：Array<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;[0] =&gt; 12<br/>&nbsp;&nbsp;&nbsp;&nbsp;[1] =&gt; 45<br/>&nbsp;&nbsp;&nbsp;&nbsp;[2] =&gt; 28<br/>&nbsp;&nbsp;&nbsp;&nbsp;[3] =&gt; 30<br/>&nbsp;&nbsp;&nbsp;&nbsp;[4] =&gt; 88<br/>&nbsp;&nbsp;&nbsp;&nbsp;[5] =&gt; 67<br/>)<br/>HeloArray<br/>(<br/>&nbsp;&nbsp;&nbsp;&nbsp;[0] =&gt; 12<br/>&nbsp;&nbsp;&nbsp;&nbsp;[1] =&gt; 28<br/>&nbsp;&nbsp;&nbsp;&nbsp;[2] =&gt; 30<br/>&nbsp;&nbsp;&nbsp;&nbsp;[3] =&gt; 45<br/>&nbsp;&nbsp;&nbsp;&nbsp;[4] =&gt; 67<br/>&nbsp;&nbsp;&nbsp;&nbsp;[5] =&gt; 88<br/>)<br/><br/>Output completed (0 sec consumed) - Normal Termination<br/><br/><br/><br/><br/>下面这个是他人写的，感觉是反向，还不是太好理解，姑且放这儿吧：<br/>冒泡排序大概的意思是依次比较相邻的两个数，然后根据大小做出排序，直至最后两位数。由于在排序过程中总是小数往前放，大数往后放，相当于气泡往上升，所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用，大树往前放，小数往后放。<br/><br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
/**
 * PHP中的冒泡排序法使用
 * 琼台博客
 */
 
// 预先声明一个数组
$arr = array (12,45,28,30,88,67);
echo &quot;原数组&quot;;
print_r($arr);
echo &quot;&lt;br/&gt;&quot;;
//冒泡排序
function maopao($arr)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;// 进行第一层遍历
&nbsp;&nbsp;&nbsp;&nbsp;for($i=0,$k=count($arr);$i&lt;$k;$i++) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 进行第二层遍历 将数组中每一个元素都与外层元素比较
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 这里的i+1意思是外层遍历当前元素往后的
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($j=$i+1;$j&lt;$k;$j++) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 内外层两个数比较
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($arr[$i]&lt;$arr[$j])&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 先把其中一个数组赋值给临时变量
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$temp = $arr[$j];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 交换位置
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr[$j] = $arr[$i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 再从临时变量中赋值回来
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr[$i] = $temp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;// 返回排序后的数组
&nbsp;&nbsp;&nbsp;&nbsp;return $arr;
&#125;
 
// 直接打印排序后的数组
echo &#039;排序后&#039;;
print_r(maopao($arr));
 
?&gt;

</textarea><br/><br/>通过以上代码执行结果<br/><br/>原数组Array ( [0] =&gt; 12 [1] =&gt; 45 [2] =&gt; 28 [3] =&gt; 30 [4] =&gt; 88 [5] =&gt; 67 ) <br/>排序后Array ( [0] =&gt; 88 [1] =&gt; 67 [2] =&gt; 45 [3] =&gt; 30 [4] =&gt; 28 [5] =&gt; 12 )<br/><br/>这就是冒泡法实例，简单吧！没有神马难度的
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post/5484/#blogcomment63793</link>
<title><![CDATA[[评论] [实践OK]传说中的冒泡排序法在PHP中实现及排序原理描述。]]></title> 
<author>Adeploy &lt;dongliang0531@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 21 Aug 2012 06:34:45 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/5484/#blogcomment63793</guid> 
<description>
<![CDATA[ 
	$k=count($arr)为嘛不放在外面。。。PHP和C差别不大吧
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post/5484/#blogcomment63794</link>
<title><![CDATA[[评论] [实践OK]传说中的冒泡排序法在PHP中实现及排序原理描述。]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 22 Aug 2012 03:44:41 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/5484/#blogcomment63794</guid> 
<description>
<![CDATA[ 
	楼上的认为会有多次做count的问题是么？
]]>
</description>
</item>
</channel>
</rss>