php算法----直接插入排序

Posted running-fly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php算法----直接插入排序相关的知识,希望对你有一定的参考价值。

算法引入

扑克牌是我们几乎每个人都玩过的游戏。平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 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

以上是关于php算法----直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

7种基本排序算法的Java实现

PHP数据结构-插入类排序:简单插入希尔排序

PHP数据结构插入类排序:简单插入希尔排序

PHP数据结构-插入类排序:简单插入希尔排序

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)