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
  • 相关阅读:
    HTML5 <meta> 标签属性,所有meta用法
    C#中导出数据到Excel表格中 逗号
    .net MVC 中缓存的使用 逗号
    MVC 过滤器 逗号
    .Net 分布式技术比较 逗号
    将DataTable导出为Excel (XML Spreadsheet).
    AntiTD
    三星WP7手机MANGO一分钟完美越狱
    SPGridView 研究笔记 Part 3 分组
    Silverlight 4 Binding Cheatsheet [转]
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/8590628.html
Copyright © 2011-2022 走看看