为什么我的排序老是出现异常
function BubbleSort($arr)
{
$num = count($arr);
for($i=0;$i <$num-1;$i++)
{
for($j=0;$j<$num-$i-1;$j++)
{
if($arr[$j] > $arr[$j+1])
{
$iTemp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $iTemp;
}
}
}
return $arr;
}总是出现这样的结果
Array ( [0] => [1] => 1 [2] => 24 [3] => 36 [5] => 82 [6] => 84 [7] => 44 [4] => 62 )
function BubbleSort($arr)
{
$num = count($arr);
for($i=0;$i <$num-1;$i++)
{
for($j=0;$j<$num-$i-1;$j++)
{
if($arr[$j] > $arr[$j+1])
{
$iTemp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $iTemp;
}
}
}
return $arr;
}总是出现这样的结果
Array ( [0] => [1] => 1 [2] => 24 [3] => 36 [5] => 82 [6] => 84 [7] => 44 [4] => 62 )
解决方案 »
- 请问如何把HTML中的[dj:url]变量传递到aa.php中再调用aa.php生成一个TXT文件
- php 值传递
- 如何让用户输入的HTML代码在从数据库输出的时候失效?
- (50分求助)PHP执行遇到 Warning: Cannot modify header information,请教大家解决办法
- session奇怪问题...郁闷了半天。。。。
- 用Smarty模板,可以输出为html文件吗?
- 怎样远程管理MYSQL数据库?在线等,急
- 一个关于session的问题。新手上路。在线,很急。
- 高分请教PHP使用smtp发送邮件的问题...
- 怎么更新不了记录了?
- Topbaby.us 诚邀精英加盟
- 求一个正则
print_r(BubbleSort($tes_arr));
Array ( [0] => 1 [1] => 24 [2] => 45 [3] => 62 [4] => 82 [5] => 84 [6] => 99 ) 测试没有问题。
function BubbleSort($arr)
{
$num = count($arr);
for($i=0;$i< $num; $i++)
{
for($j=$i+1;$j< $num; $j++)
{
if($arr[$j] > $arr[$i])
{
$iTemp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $iTemp;
}
}
}
return $arr;
}
<?php
$arr = array(24,1,82,99,84,45,62);
sort($arr); //PHP本身就有数组排序函数
print_r($arr);
{
$num = count($arr);
for($i=0;$i <$num;$i++)
{
for($j=$i;$j <$num;$j++)
{
if($arr[$i] > $arr[$j])
{
$iTemp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $iTemp;
}
}
}
return $arr;
}
算法太差.增加了时间复杂度,还用了中间变量..
给你改写如下:<?php
$arr = array(24,1,82,99,84,45,62);
Function bsort(&$arr)
{
$num = count($arr); //先统计数组元素个数
for($i=0;$i<$num;$i++)
{
for($j=$i+1;$j<$num;$j++)
{
$arr[$i]>$arr[$j]?$arr[$i]^=$arr[$j]^=$arr[$i]^=$arr[$j]:1; }
}
}
bsort($arr);
print_r($arr);
<?php
$arr = array(24,1,82,99,84,45,62);
Function bsort(&$arr)
{
$num = count($arr); //先统计数组元素个数
for($i=0;$i<$num;$i++)
{
for($j=$i+1;$j<$num;$j++)
{
$arr[$i]>$arr[$j]?$arr[$i]^=$arr[$j]^=$arr[$i]^=$arr[$j]:1;
}
}
}
bsort($arr);
print_r($arr);
<?php
function BubbleSort($arr)
{
$num = count($arr);
for($i=0;$i <$num-1;$i++)
{
for($j=0;$j <$num-$i-1;$j++)
{
if($arr[$j] > $arr[$j+1])
{
$iTemp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $iTemp;
}
}
}
return $arr;
}
$aray = Array();
$array = array(1,10, 11,156,15,61,19,13);
print_r($array);
print_r(BubbleSort($array));
?>
结果如下:Array
(
[0] => 1
[1] => 10
[2] => 11
[3] => 156
[4] => 15
[5] => 61
[6] => 19
[7] => 13
)
Array
(
[0] => 1
[1] => 10
[2] => 11
[3] => 13
[4] => 15
[5] => 19
[6] => 61
[7] => 156
)
没有什么问题啊
<?php function compositer()
{
$num = 10;
$start = 0;
$end = 100;
$ul_array = 0; while($ul_array <$num)
{
$a[]=rand($start,$end);
$ary=array_unique($a);
$ul_array=count($ary);
} foreach ($ary as $value)
{
echo $value.",";
}
return $ary;
} function BubbleSort($arr)
{
$num = count($arr);
for($i=0;$i < $num;$i++)
{
for($j=0;$j < $num;$j++)
{
if($arr[$i] < $arr[$j])
{
$iTemp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $iTemp;
}
}
}
return $arr;
}if(isset($_POST['sub'])){
session_start();
if($_POST['sub']=='原数组')
$_SESSION['原数组']=compositer();
if($_POST['sub']=='排序'){
$My_array = BubbleSort($_SESSION['原数组']);
echo "原数组:<br>";
print_r($_SESSION['原数组']);
echo '<br>';
echo "排序数组:<br>";
print_r($My_array);
}
}?>
<html>
<head>
<title>数组显示 </title>
</head> <body>
<form action="MyPhp.php" method = "post">
<input type = "submit" value = "原数组" name ="sub"/>
<input type = "submit" value = "排序" name = "sub" />
</form></body>
</html>
lz, 你为什么总把echo 语句放在 html 、body 之外?
你最开始写的排序是Bubble Sort,你在10楼写的算法,不是Bubble Sort,是选择排序。
同样,8楼syu 的算法,酷是酷了,但是也是选择排序,也不是bsort. 而且通过连续异或赋值来交换的方法和设中间交换变量temp的算法是一样的,不能提高一点效率。连续赋值一样要产生中间临时变量。
不过,select sort 效率 比 Bubble Sort 一般情况下,肯定是高的。
array_unique 这个函数虽然发现重复的值,会unique化,但是数组下标却是不改变的。就是如果发现 arr[3]=arr[5],那么它会去掉arr[5],但是并不是arr[5]后面的数都会向前移动一个位置,就是说虽然arr[5]没了,但arr[6]不会移动到arr[5]的位置上。所以lz 的compositer产生的数组会有下标大于9的情况,所以出错。我还是建议把 echo 语句写在 <body></body>里。<html>
<head>
<title>数组显示 </title>
</head> <body>
<form action="MyPhp.php" method = "post">
<input type = "submit" value = "原数组" name ="sub"/>
<input type = "submit" value = "排序" name = "sub" />
</form>
<?php function compositer()
{
$num = 10;
$start = 0;
$end = 100;
$ul_array = 0; $ary= array();//我改成这个样子了。lz可以用别的方法。
for($i=0;$i<$num;$i++){
while(in_array(($x= rand($start,$end)),$ary));
$ary[]=$x;
}
print_r($ary);
return $ary;
} function BubbleSort($arr){
$num = count($arr);
for($i=1;$i <$num;$i++){ //你原来的BubbleSort排序没有问题。但是用选择排序一般会更好。
for($j=$num-1;$j>=$i;$j--){
if($arr[$j] <$arr[$j-1]){
$iTemp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $iTemp;
}
}
}
return $arr;
}
if(isset($_POST['sub'])){
session_start();
if($_POST['sub']=='原数组')
$_SESSION['原数组']=compositer();
if($_POST['sub']=='排序'){
$My_array = BubbleSort($_SESSION['原数组']);
echo "原数组:<br>";
print_r($_SESSION['原数组']);
echo '<br>';
echo "排序数组:<br>";
print_r($My_array);
}
}
?>
</body>
</html>