php 実際にコードを書いてみよう!

こんにちは。hirafujiです。GW前、最後の投稿です。

明日からいよいよGWですね。皆様のご予定はいかがでしょうか。
私たち新卒も明日からGWとなりますので、次回のスタートアップ研修記の更新は5月7日になります。今後ともよろしくお願いします!

さて今日のphpでは、
今までの内容の総まとめとして、以下の内容の演習をしました。

【問題】
次の配列の代入値を、小さい方からならべかえよ。
$list = array(9,2,6,3,1,5,7,8,4)
【ルール】
ソート関数を使ってはいけない。

どうでしょうか。
皆さんなら、どういうコードを書きますか?

今回はまず、我らがホープ・uchiumiとmuroiのコードを紹介します。

【uchiumiの場合】
【コード】
$list = array(9,2,6,3,1,5,7,8,4) ;
$kari = 0 ;
for ( $i = 0 ; $i < count($list) ; $i++ ) {
    for ( $j = $i+1 ; $j < count($list) ; $j++ ) {
        if ( $list[$j] < $list[$i] ) {
            $kari = $list[$j] ;
            $list[$j] = $list[$i] ;
            $list[$i] = $kari ;
        }
    }
}
foreach ($list as $atai ) {
    echo $atai . "," ;
}
【出力結果】
1,2,3,4,5,6,7,8,9,
【muroiの場合】
【コード】
$list = array(9,2,6,3,1,4,7,5,8) ;
for ($count=1; $count < count($list); $count++) {
    for ($incount=0; $incount < count($list)-$count; $incount++) {
        if ($list[$incount] > $list[$incount+1]) {
            $temp = $list[$incount];
            $list[$incount] = $list[$incount+1];
            $list[$incount+1] = $temp;
        }
    }
}
for ($i=0; $i < count($list); $i++) {
    echo $list[$i];
}
echo "n";
【出力結果】
123456789

なるほどなるほど。

そしてここで、私の失敗作を紹介します・・・。

【hirafujiの場合 (失敗ばーじょん)】
$list = array(9,2,6,3,1,5,7,8,4) ;
$box = 0 ;
for ( $ii = count($list) ; $ii > 0 ; $ii--) {
    for ( $i = 0 ; $i < count($list) ; $i++ ){
        if ( $list[$i] > $list[$i+1]) {
            $box = $list[$i] ;
            $list[$i] = $list[$i+1] ;
            $list[$i+1] = $box ;
            break ;
        }
    }
    $list2[$ii] = $box ;
}
var_dump ($list2) ;

出力結果は、ご自由にお試し下さい・・・。

私の計画では、以下の手順で大成功!となるはずだったのですが。

  1. $listの、隣り合う代入値同士の大きさを比べる。
  2. 大きい数をどんどん右へずらす。
  3. 2を、右へずらす回数を減らしながら繰り返す。
  4. 完成!

うーん。まだまだですね。

今回は失敗に終わりましたが、
回数を重ねるうちにだんだんとわかってくるんだと思います。

明日からGW、だいぶ間が空いてしまいますが、今まで学んだことを忘れてしまわないようにしっかり復習してこようと思います。

ではでは皆様、よいGWをお過ごし下さい!

—-
(2008/04/25 19:05 hirafuji追記)
動画をご覧下さい!

part.1

part.2

part.3

3 件のコメント so far »

  1. by monsterbites, on 05.07.08 @ 10:26 PM

     

    はじめまして。

    いつもblogでみなさんの成長を拝見しております。
    (個人的には、hirafujiさんのPCの黄ばみ具合が気になって仕方ありません)

    動画で話が出ていた、『もう1つ配列を用意して・・・』というやり方で書いてみました。
    ご参考までに。

    $list = array(9, 2, 6, 3, 1, 5, 7, 8, 4);
    $sorted = array($list[0]);

    for ($i = 1; $i = 0; $j–) {
    if ($sorted[$j]

  2. by monsterbites, on 05.07.08 @ 10:50 PM

     

    …切れた。

    ので、こちらにUPしました。

    http://www.scribd.com/doc/2900977/for-dino

  3. by hirafuji, on 05.09.08 @ 12:24 AM

     

    >monsterbitesさん
    はじめまして!コメントありがとうございます。
    pcの黄ばみは、手洗いを徹底することで解消しました…ということは、やはり私の手が原因だったのでしょうか。そんなはずありません><!
    動画を見てくださったんですね。しかもコードまで書いていただいて…とても嬉しいです!ありがとうございます。
    早速、新卒総出で解読させていただきました。こうやればよかったんですね!全然思いつきませんでした…。おかげさまで、とてもスッキリしました!ありがとうございます。
    機会があれば、また色々と教えて下さい。これからもよろしくお願いします!

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree