gpt4 book ai didi

php - 插入排序的这两种实现之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:20 24 4
gpt4 key购买 nike

我觉得这两个实现在做同样的事情,但如果您也能告诉我它们是否(在性能方面)在做同样的事情(例如,在执行的指令数量方面),那就太好了。谢谢。

<?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));

最佳答案

不,它们不一样sortOne 函数是插入排序错误实现

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 循环,您将不会获得任何性能变化。

关于php - 插入排序的这两种实现之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com