我觉得这两个实现正在做同样的事情,但如果你能告诉我他们(表现明智)做同样的事情(例如在执行的指令数量方面)会很好。感谢。
<?php
$arr = array(10, 2, 3, 14, 16);
function sortOne($arr) {
$instructionCount = 0;
for ($i = 1; $i < count($arr); $i++) {
$instructionCount++;
for ($j = $i - 1; $j >= 0 && ($arr[$j] > $arr[$i]); $j--) {
$instructionCount++;
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
echo "\nTotal Instructions for Sort One: $instructionCount\n";
return $arr;
}
function sortTwo($array) {
$instructionCount = 0;
for($j=1; $j < count($array); $j++){
$instructionCount++;
$temp = $array[$j];
$i = $j;
while(($i >= 1) && ($array[$i-1] > $temp)){
$instructionCount++;
$array[$i] = $array[$i-1];
$i--;
}
$array[$i] = $temp;
}
echo "\nTotal Instructions for Sort Two: $instructionCount\n";
return $array;
}
var_dump(sortOne($arr));
答案 0 :(得分:0)
不,他们不一样。函数sortOne
是 insertion sort
的错误实现。
函数sortOne
的正确实现是:
for ($i = 1; $i < count($arr); $i++) {
$instructionCount++;
$temp = $arr[$i];
for ($j = $i - 1; $j >= 0 && ($arr[$j] > $temp); $j--) {
$instructionCount++;
$arr[$j + 1] = $arr[$j];
}
$arr[$j + 1] = temp;
}
考虑到现在的表现,它们基本上具有相同的性能。只需将for循环更改为while循环,就不会有任何性能变化。