php插入排序的學習,遞歸與非遞歸實現

$arr=[8,7,6,512,1,3,43,145,76,32,14,2,56,78,12,22,33,11];
//插入排序循環式
//要點1:假設'前面'都是排好序的,要拿後面的依次和前面比
//要點2:兩個循環中誰是待比較的,誰是已排好的
function csort($arr){
    for($i=1;$i<count($arr);$i++){
        $tem=$arr[$i];
        for($j=$i-1;$j>=0;$j--){
            if($tem<$arr[$j]){//這步搞清誰是待比較的,比較後如何移動位置
                $arr[$j+1]=$arr[$j];
                $arr[$j]=$tem;
            }
        }
    }
    return $arr;
}

//遞歸法
//雙層循環的外層被遞歸取代
function isort($brr,$len){
    if($len>=count($brr)){
        return $brr;
    }
    $tem=$brr[$len];
    for($i=$len-1;$i>=0;$i--){
        if($tem<$brr[$i]){
            $brr[$i+1]=$brr[$i];
            $brr[$i]=$tem;
        }
    }
    return isort($brr,$len+1);
}
print_r(isort($arr,1));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章