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 ?>
时间: 2024-10-25 19:21:01