有十个数(23,56,44,79,10,55,64,33,15,80)重新排序,第一个为最大的数,第二个为最小的数,第三个为剩下最大的数,第四个为剩下最小的数,第五个为剩下最大的数,第六个为剩下最小的数,如此类推进行排序,并打印出来。在此向大家征集最优解,谢谢~~~~

解决方案 »

  1.   


    <?php
    $arr = array(23,56,44,79,10,55,64,33,15,80);
    $outarr = array();
    $length = count($arr);
    for($i=0;$i<$length;$i++){
    if($i%2==0){
    rsort($arr);
    }else{
    sort($arr);
    }
    $outarr[$i]=$arr[0];
    unset($arr[0]);
    }
    print_r($outarr);
    ?>
      

  2.   


    $arr = array('23','56','44','79','10','55','64','33','15','80'); $arrs = array();
    for($i=0;$i<count($arr);$i++){
     $max = max($arr);
     $min = min($arr);
     $arrs[] = $max;
     $arrs[] = $min;
     
     for($j=0;$j<count($arr);$j++){
     if($arr[$j] == $max){
    unset($arr[$j]);
     }
     if($arr[$i] == $min){
    unset($arr[$j]);
     }
     }
    }
    print_r($arrs);
      

  3.   

    $arr = array(23,56,44,79,10,55,64,33,15,80);
    rsort($arr);
    $l = count( $arr );
    for($i=0,$j=$l-1;$i<$l/2;$i++,$j--) : 
    $t[$i] = $arr[$i];
    $t[$j]  = $arr[$j];
    endfor;
    echo "<pre/>";
    print_r( $t );
      

  4.   

    基础算法问题,建议看看算法书,好写一些的可用冒泡排序方法,效率好的可用快速交换排序现在的PHP程序员很多半路出家,像这样讨论算法的帖子真的很少,顶顶
      

  5.   


    虽然4#的方法比较牛,但是不好理解,还是的方法好理解些,通过认真看了几遍,对其代码做个注释,希望给和我一样的信任有所帮助!
    <?php
    $arr = array(23,56,44,79,10,55,64,33,15,80);
    $outarr = array();
    $length = count($arr);//获取$arr数组的元素个数!
    for($i=0;$i<$length;$i++){//循环数组的索引
        if($i%2==0){ //判断是否为奇数或偶数,也就是楼主所的第一,第二,第三。
            rsort($arr); //如果所以为被0除尽,也就是第一个排列位,特注:数组索引从0开始的。倒序排列,从大到小
        }else{
            sort($arr);  //如果不能除尽,则顺序排列,从小到大。
        }
        $outarr[$i]=$arr[0]; //取得第一索引位的元素赋给$outarr数组,索引为从0开始!
        unset($arr[0]);    //然后删除这个排列完成的元素
    }
    print_r($outarr);  //最后输出这个数组,自然也就是楼主要求的效果了。
    ?>
      

  6.   


     这个方法也可以,但是因为用了2个FOR循环,效率上肯定不如一个FOR的更好!
    总结:
      效率上最好的应该是4#,但是最好理解的,效率则中的方法,应该还是dingsongtao的!
      

  7.   

    $ar = array(23,56,44,79,10,55,64,33,15,80);
    rsort($ar);$len = count($ar);for($i=0; $i<$len/2; $i++) {
      $out[] = $ar[$i];
      $out[] = $ar[$len-$i-1];
    }
    print_r($out);
    Array
    (
        [0] => 80
        [1] => 10
        [2] => 79
        [3] => 15
        [4] => 64
        [5] => 23
        [6] => 56
        [7] => 33
        [8] => 55
        [9] => 44
    )
      

  8.   

    $arr = array(23,56,44,79,10,55,64,33,15,80);
    sort($arr);
    $imax = floor(count($arr)/2);
    $newarr = array();
    for(i=0;i<$imax;i++)
    {
       array_push($newarr,array_pop($arr),array_shift($arr));
    }print_r($newarr);
      

  9.   


    $ar = array(80,10,79,15,64,23,56,33,55,44);
    $empty_array_max = array();
    $empty_array_min = array();
    foreach($ar as $key => $value)
    {

    if($key%2==0)
    {
     $empty_array_max[] = $value;
    }
    else
    {
    $empty_array_min[] = $value;
    }

    }
    $empty_array_max = array_reverse($empty_array_max);
    $empty_array = array_merge($empty_array_min,$empty_array_max);
    print_r($empty_array);我也来发表下自己的看法。
      

  10.   

    2楼的没问题,但是多次排序,慢
    3楼的好像不对....
    4楼的没问题,就是key没有排序,看起来不完美.
    10,11楼的在数组为奇数个数时,结果有重复或遗漏,
    13楼的不对....
      

  11.   

    <?php
    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
    rsort($arr);
    $l = count($arr);
    for($i=0,$j=$l-1;$i<=$j;$i++,$j--)
    {
      $newArr[]= $arr[$i];
      if($i<$j)
      {
      $newArr[] = $arr[$j]; 
      }
    }
    print_r($newArr);
    ?>
    根据十四楼的建议 对四楼的代码 修改了下