zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SVN:多版本库环境的搭建
    记一次KUBERNETES/DOCKER网络排障
    k8s部署prometheus
    误删除 linux 系统文件了?这个方法教你解决
    kubectl命令自动补全
    git杂记:忽略ssl认证
    微软官方原版本下载msdn
    Android Studio 小技巧(2):AS中Button文字默认大写的问题
    <Android 基础(十一)> Snackbar
    <Android 基础(十)> FloatingActionButton
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/8590628.html
Copyright © 2011-2022 走看看