
https://github.com/yuukanehiro/AlgorithmsDataStructure/blob/main/Sort/SelectionSort.php
もくじ
選択ソートって何?
∂
この動きを理解しておきます
ループする毎に配列の数を削っていく、この動きの理解が大切
<?php
$list = [1, 2, 3, 4, 5];
for ($index = 0; $index < $max; $index++) {
for ($key = $index; $key < $max; $key++) {
echo $list[$key];
}
}
// 123452345345455
実装しよう
<?php
$list = range(0, 100);
shuffle($list);
// 実行
main($list, true);
function main(array $list, bool $is_test = false) {
switch ($is_test) {
// テスト
case true:
printf("テスト結果は「%b」です。", testSelectionSort($list));
break;
// 実行
case false:
var_dump(selectionSort($list));
break;
}
}
/**
* 選択ソート
*
* @param array $list
* @return array
*/
function selectionSort(array $list): array
{
$max = count($list);
for ($index = 0; $index < $max; $index++) {
$min_key = $index; // 基準となる最小値の位置
// 最小値の$keyの位置を求める
for ($key = $index; $key < $max; $key++) {
if ($list[$key] < $list[$min_key]) {
$min_key = $key;
}
}
// 入れ替える
$temp = $list[$index];
$list[$index] = $list[$min_key];
$list[$min_key] = $temp;
}
return $list;
}
/**
* テストコード
*
* @param array $list
* @return bool
*/
function testSelectionSort(array $list)
{
$test_count = 1000; // テスト回数
$clone_list = $list;
sort($clone_list);
for ($i = 0; $i < $test_count; $i++) {
if ($clone_list !== selectionSort($list)) {
return false;
}
}
return true;
}



