开篇
学计算机的好像都要学算法与数据结构,在算法书里面《算法导论》 应该算是经典之作了。我希望能在2009年好好的拜读这本书,当然他太厚了,也许需要更长的时间去揣摩。如同武功秘籍,需要些悟性,还需要平时上手练一练,比划比划。
PHP是我目前吃饭用的家伙,所以用PHP这件兵器来修炼《算法导论》这部秘笈,以希望自己的内力可以有所提高。
如果各位前辈,发现我出了什么错误,那么请在鄙视和嗤笑过后直接指出我的错误。感激不尽。
插入排序——Insertion-Sort
算法导论的第二章开篇详细介绍了插入排序的原理。PHP的实现如下:
- /**
- * Insertion-Sort
- *
- * @param array $A
- * @return array
- */
- function insertionSort($A=array())
- {
- for ($j=1;$j<count($A);$j++){
- $key = $A[$j];
- $i = $j-1;
- while ($i>=0 && $A[$i]>$key) {
- $A[$i+1] = $A[$i];
- $i--;
- }
- $A[$i+1] = $key;
- }
- return $A;
- }
在2.1节后面的练习题里2.1-2要求重写插入排序以非递增的顺序排序。照葫芦画瓢:
- /**
- * Sort into NONincreasing
- *
- * @param array $A
- * @return array
- */
- function insertionSortDesc( $A = array ()){
- for ( $j =1; $j < count ( $A ); $j ++){
- $key = $A [ $j ];
- $i = $j -1;
- while ( $i >=0 && $A [ $i ]< $key ) {
- $A [ $i +1] = $A [ $i ];
- $i --;
- }
- $A [ $i +1] = $key ;
- }
- return $A ;
- }
当然在函数之后最好能进行一下测试,没那么严格,大概是个意思吧:
- function test()
- {
- $A = array (5,2,4,6,1,3);
- $B = insertionSort( $A );
- print_r( $B );
- $C = insertionSortDesc( $A );
- print_r( $C );
- }
- test();
把测试文件和上面两个函数放到一起,跑一下吧~一个升序一个降序。
祝看到帖子的人元旦快乐~!
另外:做人要厚道老实,转帖要注明出处。(估计没人转这个帖子=。=||)