- 论坛徽章:
- 59
|
1:要求在一组数中,插入一个新数,并维护原来的排序方式不变- <?php
- function insertArr($arr,$val){
- $pos=0;
- if (sizeof($arr)==0) return array($val); //传入数组没有值
- if (sizeof($arr)==1){ //传入数组个数为1
- return array($val,$arr[0]);
- }
- $bfind=false;
- if ($arr[0]>$arr[sizeof($arr) - 1]){
- $bfind=true; //从大到小排序
- }else{
- $bfind=false;//从小到大排序
- }
- for($i=0;$i<sizeof($arr);$i++){ //找到要插入值应该插入的位置。
- if ($bfind){
- if ($arr[$i]<$val){
- $pos=$i;
- break;
- }
- }else{
- if ($arr[$i]>$val){
- $pos=$i;
- break;
- }
- }
- }
- $left_arr=array();
- $right_arr=array();
- for ($i=0;$i<sizeof($arr);$i++){ //根据要插入的值把数组分左右两部分。
- if ($i<$pos){
- $left_arr[]=$arr[$i];
- }else{
- $right_arr[]=$arr[$i];
- }
- }
- return array_merge($left_arr,array($val),$right_arr);
- }
- //测试
- $arr=array();
- print_r(insertArr($arr,10));echo "<br>";
- $arr=array(1);
- print_r(insertArr($arr,10));echo "<br>";
- $arr=array(1,3,8,12,13,15);
- print_r(insertArr($arr,10));echo "<br>";
- $arr=array(31,23,18,12,11,1);
- print_r(insertArr($arr,10));echo "<br>";
- ?>
复制代码 |
|