###前提・実現したいこと
初めて質問させていただきます。
プログラミングを勉強し始めて3か月。PHPを始めて1週間の初心者です。
ソースコードを見ながら、マージソートのアルゴリズムを勉強している最中なのですが、コードの中でどう処理が流れているかが分かりません。
###該当のソースコード
PHP
1 2$list = range(0, 200 , 1); 3shuffle($list); 4 5echo 'ソートする配列は'; 6echo '<pre>'; 7var_dump($list); 8echo '</pre>'; 9 10$listCount = count($list); 11 12mergeSort($list,0, $listCount-1); 13 14echo 'ソート完了'; 15echo '<pre>'; 16foreach ($list as $value) { 17 echo $value; 18 echo '<br>'; 19} 20echo '</pre>'; 21 22function mergeSort(&$list, $first, $last) { //2.ここに戻る? 23 if ($first < $last) { 24 $center = intval(($first + $last) / 2); 25 $p = 0; 26 $j = 0; 27 $k = $first; 28 $tmp = null; 29 mergeSort($list, $first, $center); //1.ここに来たら 30 mergeSort($list, $center + 1, $last); 31 32 for ($i = $first; $i <= $center; $i++) { 33 $tmp[$p++] = $list[$i]; 34 } 35 36 while ($i <= $last && $j < $p) { 37 if ($tmp[$j] <= $list[$i]) { 38 $list[$k] = $tmp[$j]; 39 $k++; 40 $j++; 41 } else { 42 $list[$k] = $list[$i]; 43 $k++; 44 $i++; 45 } 46 } 47 48 while ($j < $p) { 49 $list[$k++] = $tmp[$j++]; 50 } 51 } 52}
###試したこと
ユーザー定義関数の記述が始まってから、8行目のところで躓いています。
mergeSort($list, $first, $center); まで行ったら、
function mergeSort(&$list, $first, $last) { の列に戻るのでしょうか?
ソースコードは動くので、私がなにか勘違いをしているのだろうなと思うのですが、それが分かりません。
###補足情報(言語/FW/ツール等のバージョンなど)
https://github.com/Khanashima/algorithm/blob/master/src/sort/mergeSort.php
こちらのページのコードです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。