有问题啊 有问题 php 小问题

wwwmmm 发布于 2012/07/19 19:54
阅读 199
收藏 0
PHP
$arr=array(1,7,3,2,5,15,13);

//从小到大插入排序
function insertsort($arr){
	
	$n=count($arr);
	
	for($i=1;$i<$n;$i++){
		
		$insertVal=$arr[$i];
		
		$j=$i-1;
		
		while($j>=0&&$insertVal<$arr[$j]){
		
			$arr[$j+1]=$arr[$j];
		
			$j--;
			
		}
		
		$arr[$j+1]=$insertVal;
	
	}

	return $arr;

}

print_r(insertsort($arr));
写了个插入排序   为什么 其中的 $arr[$i]  必须赋值给$insertVal 变量 如果直接用$arr[$i]
来替代$insertVal 就会出错啊  涉及 $arr[$i]的代码都在for 循环内 为什么不能用呢
加载中
0
wwwmmm
wwwmmm
<?php
	
	//插入排序法 从小到大的顺序排列
	
	$arr = array(1,6,7,4,3,5);
	
	$n = count($arr);
	
	for($i=1;$i<$n;$i++){
		
		$j=$i-1;
		
		
		while($j>=0&&$arr[$i]<$arr[$j]){
		
			$arr[$j+1]=$arr[$j];
		
			$j--;
			
		}
		
		$arr[$j+1]=$arr[$i];
	
	}
	
	print_r($arr);

这段 代码 为什么错啊
0
逝水fox
逝水fox
$arr = array(1,6,7,4,3,5);
$n = count($arr);
for($i=1;$i<$n;$i++){
    // 这要记得备份一下i位置的值
    //否则下面的arr[j+i]=arr[j]就给你覆盖了
    $k = $arr[$i];		
    $j=$i-1;

    while($j>=0&&$k<$arr[$j]){
        $arr[$j+1]=$arr[$j];
        $j--;	
    }
    // 这里是用备份的值		
    $arr[$j+1]=$k;
}

不怎么会PHP,不知道语法对不对,不过思路上应该没多大问题,你这程序的问题在于arr[i] 被覆盖了
0
wwwmmm
wwwmmm

引用来自“逝水fox”的答案

$arr = array(1,6,7,4,3,5);
$n = count($arr);
for($i=1;$i<$n;$i++){
    // 这要记得备份一下i位置的值
    //否则下面的arr[j+i]=arr[j]就给你覆盖了
    $k = $arr[$i];		
    $j=$i-1;

    while($j>=0&&$k<$arr[$j]){
        $arr[$j+1]=$arr[$j];
        $j--;	
    }
    // 这里是用备份的值		
    $arr[$j+1]=$k;
}

不怎么会PHP,不知道语法对不对,不过思路上应该没多大问题,你这程序的问题在于arr[i] 被覆盖了
没有吧  都在for循环 之内啊 
y
yangc22
测试前端性能
y
yangc22
1213613
wwwmmm
wwwmmm
回复 @逝水fox : 嗯 最开始的 是对的 第二个 没有保存$arr[$i]的值 出错了
逝水fox
逝水fox
才看到,你最开始的程序是对的嘛
逝水fox
逝水fox
$j=$i-1; 这时第一次执行 $arr[$j+1]=$arr[$j]; 不就等同于 $arr[$i]=$arr[$j]; 这里赋值了,但之前又没有备份吗。然后你在同一层循环后面引用$arr[$i]不就出问题了。
0
wwwmmm
wwwmmm

引用来自“有生之年”的答案

引用来自“逝水fox”的答案

$arr = array(1,6,7,4,3,5);
$n = count($arr);
for($i=1;$i<$n;$i++){
    // 这要记得备份一下i位置的值
    //否则下面的arr[j+i]=arr[j]就给你覆盖了
    $k = $arr[$i];		
    $j=$i-1;

    while($j>=0&&$k<$arr[$j]){
        $arr[$j+1]=$arr[$j];
        $j--;	
    }
    // 这里是用备份的值		
    $arr[$j+1]=$k;
}

不怎么会PHP,不知道语法对不对,不过思路上应该没多大问题,你这程序的问题在于arr[i] 被覆盖了
没有吧  都在for循环 之内啊 
哦哦 原来 如此 $arr[$j+1]  也是$arr[$i]
wwwmmm
wwwmmm
回复 @逝水fox : 谢谢啦 谨遵教诲
逝水fox
逝水fox
算法之类的基础问题,想办法单步调试一下,看看各个变量每一步的状态,就很容易理解了。
0
齐迹
齐迹

用php 至于这样吗?

看看手册把!

0
byhard
byhard
学习啦。
0
wwwmmm
wwwmmm

引用来自“齐迹”的答案

用php 至于这样吗?

看看手册把!

那 怎么样用啊
0
yyg291906351
yyg291906351

$arr = array(12,1,5,88,35,0,18,100,50,21,28,7,9,9.5);
 //快速排序
function quickSort($arr){
	if(!is_array($arr)) return $arr;
	$len=count($arr);
	for($i=0; $i<$len; $i++){
		$min = $arr[$i];
		for($j=$i+1; $j<$len; $j++){
			if($arr[$i] > $arr[$j]){
				$temp = $arr[$i];
				$arr[$i] = $arr[$j];
				$arr[$j] = $temp;
			}
		}
		$min = $arr[$j];
	}
	return $arr;
}
$arr4 = quickSort($arr);
echo implode(',', $arr4);
返回顶部
顶部