排序之插入排序-PHP

Posted 巅峰小学生

tags:

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

  1 <?php
  2     header("content-type:text/html;charset=utf-8");
  3 
  4     /*
  5         插入排序思想:
  6             源: 10 7 1
  7 
  8             1、首先:需要两个变量
  9                 $insertVal  =》 用于保存【当前遍历到的数值元素值】
 10                 $index        =》 用于保存【当前遍历到的数值元素值的上一个值的下标】
 11 
 12 
 13             2、如果满足条件
 14                 条件 :【$index大于0】 且 【上一个数值元素值】比【当前的数值元素值】大
 15                 
 16                     满足条件操作        将 $arr[$index+1](即$arr[$i]即当前的数值元素值)设置成 【当前遍历到的数值元素值的上一个值】,再将$index-1
 17                     不满足条件操作        $arr[$index+1] = $insertVal(即将【当前遍历到的数值元素值】设置成【没有进入到操作1时遍历到的数值元素值】);
 18         
 19         例子
 20 
 21             第一次:
 22                 $insertVal = 10
 23                 $index = -1
 24 
 25                 不满足循环
 26 
 27                 $arr[$index+1] = $insertVal //10 7 1
 28 
 29                 结果:10 7 1
 30             
 31             第二次:
 32                 $insertVal = 7
 33                 $index = 0
 34 
 35                 满足循环
 36                  //1:(0>=0 && 10>7)
 37                 ($index>=0 && $arr[$index]>$insertVal)
 38                     $arr[$index+1] = $arr[$index];  把上一个值复制给当前值
 39                     $index--;  // --过后 值为-1
 40                     
 41                     循环了1次结果:10 10 1
 42                 
 43 
 44                 $arr[$index+1] = $insertVal //7 10 1
 45 
 46                 结果:7 10 1
 47 
 48             第三次:
 49                 $insertVal = 1
 50                 $index = 1
 51 
 52                 满足循环
 53                  //1:(1>=0 && 10>1) 2:(0>=0 && 7>1)  3:(-1>=0 && 7>1)xxx
 54                 ($index>=0 && $arr[$index]>$insertVal)
 55                     $arr[$index+1] = $arr[$index];  把上一个值复制给当前值
 56                     $index--;  // 1:(--过后 值为0) 2:(--过后 值为-1)
 57                     
 58                     循环了1次结果:10 10 1
 59                 
 60 
 61                 $arr[$index+1] = $insertVal //1 7 10
 62 
 63                 结果:1 7 10
 64         
 65     */
 66 
 67 
 68 
 69     
 70     $arr = array(10, 7, 1);
 71 
 72     function search(&$arr){
 73         
 74         //从$i = 1 这个数加入到一个有序数组中
 75         for($i=0; $i<count($arr); $i++){
 76             
 77             //提取数组第一个值作保存
 78             $insertVal = $arr[$i];
 79             
 80             //遍历当前值上一个值的下标(左边值的下标)
 81             $index = $i - 1;
 82             
 83             /*
 84                 $index>=0 防止交表越界
 85                 $arr[$index] > $insertVal 相对于当前值($arr[$i] = $insertVal)来说上一个数比自己打才进行替换操作
 86             */
 87             while($index>=0 && $arr[$index]>$insertVal){
 88                 
 89                 $arr[$index+1] = $arr[$index];
 90                 $index--;  //$index-- 表示不断向前移动,因为不知道前面还有没有数,有就再操作
 91             }
 92 
 93             //将$insertVal值 放入到 $index+1 位置即可
 94             $arr[$index+1] = $insertVal;
 95         }
 96     }
 97 
 98     search($arr);
 99 
100     foreach($arr as $value){
101         echo $value . ‘<br>‘;
102     }
103 
104 ?>

 

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

排序算法篇--之直接插入排序

php之插入排序

php实现插入排序的代码示例

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

排序02-直接插入排序法