php插入式排序的两种写法。

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

百度了下插入式排序,百度百科中php版本的插入式排序如下:

1functioninsert_sort($arr) {2//将$arr升序排列3$count=count($arr);4for($i=1;$i<$count;$i++) {5$tmp=$arr[$i];6$j=$i- 1;7while($j>=0 &&$arr[$j] >$tmp) {8$arr[$j+1] =$arr[$j];9$j--;10}11if(($j+1) !=$i) {12$arr[$j+1] =$tmp;13}14}15return$arr;16}

看着实在是别扭,然后就翻了下Robert Sedgewick写的《算法》,书中的代码都是用java实现的,在这里将插入式排序改用php重写一下:

1functionnew_insert_sort($arr) {2//将$arr升序排列3$count=count($arr);4for($i=1;$i<$count;$i++) {// 索引,完成一次插入就需要将索引$i右移5//将arr[i]插入到a[i-1]、a[i-2]、a[i-3]...之中,也就是如果符合条件就交换位置6for($j=$i;$j>0 &&$arr[$j] <$arr[$j-1];$j--) {7$tmp=$arr[$j];8$arr[$j] =$arr[$j-1];9$arr[$j-1] =$tmp;10}11}12return$arr;13}

我觉得第二种写法更容易让人理解,就像《算法》中写到:插入式排序就像爱玩扑克牌的人整理牌一样,将每一张牌插入到其他已经排好序的牌的适当位置。另外,百度时还发现了博客园的文章Frank Fan的文章插入式排序,也可以看看。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航