码迷,mamicode.com
首页 > 编程语言 > 详细

排序之插入排序-PHP

时间:2017-09-22 10:18:07      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:例子   logs   amp   arc   sea   数组   style   越界   dex   

  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

标签:例子   logs   amp   arc   sea   数组   style   越界   dex   

原文地址:http://www.cnblogs.com/tandi19960505/p/7572416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!