十个数排序求优解? 有十个数(23,56,44,79,10,55,64,33,15,80)重新排序,第一个为最大的数,第二个为最小的数,第三个为剩下最大的数,第四个为剩下最小的数,第五个为剩下最大的数,第六个为剩下最小的数,如此类推进行排序,并打印出来。在此向大家征集最优解,谢谢~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?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);?> $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); $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 ); 基础算法问题,建议看看算法书,好写一些的可用冒泡排序方法,效率好的可用快速交换排序现在的PHP程序员很多半路出家,像这样讨论算法的帖子真的很少,顶顶 虽然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); //最后输出这个数组,自然也就是楼主要求的效果了。?> 这个方法也可以,但是因为用了2个FOR循环,效率上肯定不如一个FOR的更好!总结: 效率上最好的应该是4#,但是最好理解的,效率则中的方法,应该还是dingsongtao的! $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) $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); $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);我也来发表下自己的看法。 2楼的没问题,但是多次排序,慢3楼的好像不对....4楼的没问题,就是key没有排序,看起来不完美.10,11楼的在数组为奇数个数时,结果有重复或遗漏,13楼的不对.... <?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);?>根据十四楼的建议 对四楼的代码 修改了下 apache 非常简单的安装问题请教? php二维数组排序 php!!谢谢!! 提示 Invalid image dimensions 为什么? mysql 查询区分大小写??? char和varchar长度设定问题 北大校园BBS引起轰动的一篇文章 $_REQUEST为什么是空的? 遇上下面问题该怎么解决?是APACHE+PHP的安装问题. 问一个很简单的问题????? 问个php字符拼接问题[帮顶给分]-方法组合问题 php里 自定义错误
<?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);
?>
$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);
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
$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); //最后输出这个数组,自然也就是楼主要求的效果了。
?>
这个方法也可以,但是因为用了2个FOR循环,效率上肯定不如一个FOR的更好!
总结:
效率上最好的应该是4#,但是最好理解的,效率则中的方法,应该还是dingsongtao的!
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
)
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);
$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);我也来发表下自己的看法。
3楼的好像不对....
4楼的没问题,就是key没有排序,看起来不完美.
10,11楼的在数组为奇数个数时,结果有重复或遗漏,
13楼的不对....
$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);
?>
根据十四楼的建议 对四楼的代码 修改了下