算法引入
扑克牌是我们几乎每个人都玩过的游戏。平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 5,第二张牌是 3,自然而然的我们把 3 插到 5 的前面;第三张牌是 4,查到 3 和 5 的中间;第四张牌是 6,放到 5 的后面;第五张牌是 2,插到 3 的前面;……。最后当我们摸完所有的牌时,手上的牌都是从小到大(点数)排好序的。
<?php //利用for循环把元素1插入到数组[2,3,4,5]头部 //思路就是把前面数组元素的值赋给后面的数组元素的值,既所有元素的位置向后挪动一下,然后索引0得位置就空出来了可以放插入的元素了 function arr_push(array &$arr,$insert){ $count = count($arr); for($i=$count;$i>0;$i--){ $arr[$i]=$arr[$i-1]; } $arr[0]=$insert; } $arr = [2,3,4,5]; arr_push($arr,1); echo '<pre>'; print_r($arr); //直接插入排序 //思路假设第一个元素是已经存在的有序表,从第二个元素开始拿来和前面有序表的元素作比较, //比插入元素大的元素都向后移动一下,空出来的位置就是该元素插入的位置。 //由两层for循环完成,外层控制元素值,内层作比较然后向后挪动 function InsertSort(array &$arr){ $count = count($arr); //数组中第一个元素作为一个已经存在的有序表,所以从第二个元素即索引为1的元素开始与前面的有序表比较 for($i = 1;$i < $count;$i ++){ $temp = $arr[$i]; //设置哨兵,存储插进来的元素 for($j = $i - 1;$j >= 0 && $arr[$j] > $temp;$j --){ $arr[$j + 1] = $arr[$j]; //记录后移,位置空出来 } $arr[$j + 1] = $temp; //插入到元素后移后空出来的正确位置 } } $arr = array(9,1,5,8,3,7,4,6,2); InsertSort($arr); echo '<pre>'; print_r($arr);
参考http://blog.csdn.net/baidu_30000217/article/details/53072746