PHP クイックソート
基本情報で出てきた問題
・平成27年春期 データ構造とアルゴリズム
・問題にあるプログラムをPHPのコードにしてみた
PHPで書いてみた
<?php $array = [5,3,6,4,7,2,1]; //任意の配列 $K = 4; //何番目の値を取りたいか //標準入力を使いたい場合上記をコメントアウトして、書き部分をコメントアウト外す // $array = explode(",", trim(fgets(STDIN))); //カンマ区切りで入力する // foreach($array as $v){ // if(!is_numeric($v)) { // echo '数値以外が含まれています';exit; // } // } // $K = trim(fgets(STDIN)); //何番目の値を出力したいか // if(!is_numeric($K) || $K <= 0 || $K > count($array)){ // echo '範囲外です';exit; // } $n = count($array); $top = 0; $last = $n-1; $k = $K-1; $ans = quicksort($array, $k, $top, $last); echo $ans; function quicksort($array, $k, $top, $last){ while($top < $last){ $pivot = $array[$k]; $i = $top; $j = $last; while(true){ while($array[$i] < $pivot){ $i++; } while($pivot < $array[$j]){ $j--; } if($i >= $j){ break; } $work = $array[$i]; $array[$i] = $array[$j]; $array[$j] = $work; $i++; $j--; } if($i <= $k){ $top = $j + 1; } if($k <= $j){ $last = $i - 1; } } return $array[$k]; }
感想
・今回は値を出力しただけだが、並び替えられた配列を取得したりもできそう
・標準入力を使った場合を入れてみた