BLOG ENTRY

PHPでマージソート(mergesort)のアルゴリズム

php

基本的なソートアルゴリズムであるマージソートをPHPで行う。

<?php

/*
* マージソートを行う
*/

//併合する関数
function mergeArr($left_arr, $right_arr) {

    $result_arr = array();

    $i = 0;
    $j = 0;
    $k = 0;

    while ($i < count($left_arr) && $j < count($right_arr)) {

        if ($left_arr[$i] < $right_arr[$j]) {
            $result_arr[$k] = $left_arr[$i];
            $i++;
            $k++;
        } else {
            $result_arr[$k] = $right_arr[$j];
            $j++;
            $k++;
        }
    }

    while ($i < count($left_arr)) {
        $result_arr[$k] = $left_arr[$i];
        $i++;
        $k++;
    }

    while ($j < count($right_arr)) {
        $result_arr[$k] = $right_arr[$j];
        $j++;
        $k++;
    }

    return $result_arr;
}

//マージソートを行う関数
function mergeSort($num_arr) {

    if (count($num_arr) > 1) {
        $left_arr  = array_slice($num_arr, 0, ceil(count($num_arr)/2));
        $right_arr = array_slice($num_arr, ceil(count($num_arr)/2));
        return mergeArr(mergeSort($left_arr), mergeSort($right_arr));
    } else {
        return $num_arr;
    }
}

$num_arr = array(2, 41, 105, 51, 86, 21, 75, 54, 46, 19);
$result_arr = mergeSort($num_arr);

var_dump($result_arr);



終わり。

関連記事

  1. 外部複数ブログのRSS情報をWordPress上で表示する[WordPress]
  2. [PHP][PEAR]Services_Twitterを使ってタイムラインを取得
  3. 何日後、何ヵ月後、何年後、何日前、何ヶ月前、何年前の日付を算出する[PHP]
  4. CakePHP1.2上で外部サイトのRSSを取得&表示[CakePHP]
  5. アソシエーションを絡めたcountで件数がとれない&エラー[CakePHP]

WRITE COMMENT


(required)


(required)


(required)

MENU