要求:按照每一列中最大元素重新排序。比如原来是 1 2 3 4 5 6 7 8 9 排序过后就是 3 2 1 6 5 4 9 8 7 按照9 8 7 顺序重新排列了数组。
txt文件内容如下
5 6 12 2 3 58 8 5 15 5 59 5 52 4 41 14 5 2 2 1 1 40 2 1 12 8 1 1 1 1 1 1
实现代码如下:
<?php
$r=0;
$l=0;
$arr=array();
$file=fopen(“input.txt”,”r”);
$rl=fgets($file);
list($r,$l)=explode(‘ ‘,$rl);//先读取行数和列数
for($i=0;$i<$r;$i++)//每次读取一行,然后分隔存入数组中
{$rl=fgets($file);
array_push($arr,explode(‘ ‘,$rl));
}
fclose($file);
echo “总共有”.sizeof($arr).”行,”. sizeof($arr[0]).”列<br />”;
echo “二维数组内元素排序前为:<br />”;
for($i=0;$i<$r;$i++)
{
for($j=0;$j<$l;$j++)
{
echo $arr[$i][$j].” “;
}
echo “<br />”;
}
//开始排序,要求是按照列中最大元素排序
function GetMax($arr1)//获取数组中最大元素的y坐标
{
$max=intval($arr1[0][0]);
$y=0;
for($i=0;$i<sizeof($arr1);$i++)
{
for($j=0;$j<sizeof($arr1[0]);$j++)
{
//if(intval($arr1[$i][$j])>$max)//这里的intval不能去掉,去掉有错
if(intval($arr1[$i][$j])>$max)
{
$max=$arr1[$i][$j];
$y=intval($j);
}
}
}
return intval($y);
}
$newarr=array(array());
for($i=0;$i<$l;$i++){
$a=GetMax($arr);
for($j=0;$j<$r;$j++)
{
$newarr[$j][$i]=$arr[$j][$a];
$arr[$j][$a]=0;
}
}
echo “排序过后是:<br />”;
for($i=0;$i<$r;$i++)
{
for($j=0;$j<$l;$j++)
{
echo $newarr[$i][$j].” “;
}
echo “<br />”;
}
?>