好多年前用C写过,觉得挺简单的,但是今天用PHP重写了一下,写了两个小时, 哈哈,有点丢人。 我是每次有新元素,先占了一个位置。然后如果发现这个位置没动,就插到最左边。下边看代码吧。
public function handle()
{
$arr = array(2,11,23,5,888,111,22,34,56,134,22);
echo '排序前数据 '.implode(' ',$arr)."\n";
$res =insertSort( $arr );
echo '排序后数据 '.implode(' ',$res);
}
function insertSort($arr)
{
if(empty($arr)) return [];
$resArr[0] = $arr[0];
$count = count($arr);
for($i = 1;$i < $count; $i++){
//先给最新元素一个位置。
$resArr[] = '';
$resCount = count($resArr);
//拿上原数组的值去比较
for($j = $resCount -2 ; $j >= 0;$j--){
if($arr[$i] > $resArr[$j]){
for($t =$resCount-1;$t > $j+1;$t--) {
$resArr[$t] = $resArr[$t - 1];
}
$resArr[$j + 1] = $arr[$i];
break;
}
}
//如果最后一个值是空串,说明这个值,在最左边。全部移动呀。然后把值放进去
if ($resArr[($resCount - 1)] == '') {
for ($t = $resCount - 1; $t > 0; $t--) {
$resArr[$t] = $resArr[$t - 1];
}
$resArr[0] = $arr[$i];
}
}
return $resArr;
}