負けてたまるか。

脳トレ、プログラミング、PHP、WEB製作などのメモ

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-) | Edit
整列処理
  • データが規則的に並んでいたほうがプログラムが簡単になるので、データは並び替えて操作することが多い
  • データを大きい順、小さい順に並び替えることを整列(ソート)という
  • たとえば、会社であれば、お給料の高い順に並べる。また、学校であれば、出席番号順に並べる、テストの成績順にならべる、といったことに使う

バブルソートとは?



ランダム配列数のバブルソートの例
  • バブルソートは整列処理のアルゴリズムの一つ
  • 基本交換法ともいう
  • 計算時間が遅いことで有名(非効率)
  • 最小値がだんだんと先頭に移動しながら整列する。この動きが水の泡(バブル)が水面に向かっていくように見えることから、バブルソートと呼ばれる

アルゴリズム:バブルソート
  • データ同士を比較する
  • 1番目と2番目を比較、順番が逆であれば入れ替える
  • 次に2番目と3番目を比較して入れ替える
  • これを最後まで行うと、最後の数だけが最小または最大の数として確定する
  • この操作を全ての数が確定するまで繰り返す

図解バブルソート ステップ1~3



図解:バブルソート step1

↓↓↓↓↓↓↓↓↓


図解:バブルソート step2

↓↓↓↓↓↓↓↓↓


図解:バブルソート step3


ソースコード:JavaScript

  • まずはスクリプトを宣言します。
    • <script type="text/javascript"></script>
  • 次に、その中にソートする配列を作ります。
    • java = [12,1243,4,3463,...]
  • 次に、ボタンを作ります。クリックした時に関数を実行するように設定します。
    • <form><input type="button" onclick="kansu()" value="バブルソート"></form>
<script type="text/javascript">

java = [
12,1243,4,
3463,85,45,
43,87,67,
253,645,95
];


</script>

<form><input type="button" onclick="kansu()" value="バブルソート"></form>

  • ソートの効果をわかりやすくするため、シャッフル前の配列の中身を表示します。
  • 3つごとに改行を入れます。
    • if((s+1)%3 == 0) document.write("<br>");
for(s=0; s<java.length-1; s++){
        document.write(java[s] + " , ");
        if((s+1)%3 == 0) document.write("<br>");
}

  • 関数 kansu() を作ります。
  • ボタンをクリックしたときに実行されます。
function kansu(){

}//function kansu()

  • 関数 kansu() の中に繰り返し(for文)を作ります。
  • ここでは、「親フォー」と呼びます。
  • ソートされる配列の要素数だけ繰り返します。
    • 0~java.length - 1
function kansu(){

        for(i=0; i<java.length-1; i++) { //親フォー
 
        }//for
        
}//function kansu()

  • for文の中にfor文を作ります。
  • ここでは、「子フォー」と呼びます。
  • こちらは、配列の要素数の最後から、変数 i  まで繰り返します。
  • j>i
  • 親フォーが配列の最初から繰り返すのに対して、子フォーは配列の最後から繰り返します。
  • 親フォーを繰り返すほど、子フォーの繰り返しの範囲は短くなります。
  • j>i
function kansu(){
        for(i=0; i<java.length-1; i++) { //親フォー

                for(j=java.length-1; j>i; j--){ //子フォー
            
                }//for

        }//for
}//function kansu()

  • 子フォー内にデータ同士を比較する if文を作ります。
  • 隣りあう2つの要素を比較します。
  • もし下の要素が、上の要素より数が小さければ、 java[j] < java[j-1]
  • 下の要素と上の要素の値を並び替えます。 java[j] = java[j-1]; java[j-1] = taihi;
  • このとき、java[j]の値を退避させる変数 taihi を最初に作っておくのがポイント
  • これで、バブルソートは完了しました。
function kansu(){
        for(i=0; i<java.length-1; i++) {
                for(j=java.length-1; j>i; j--){
                        
            if(java[j] < java[j-1]){
                                var taihi = java[j];
                                java[j] = java[j-1];
                                java[j-1] = taihi;
                        }//if
              
        }//for
        }//for
}//function kansu()

  • 本当にソートできたか確認するため、配列 java の全ての値を表示します。
  • document.write(java[s] + " , ");
function kansu(){
        
for(s=0; s<java.length-1; s++){
        document.write(java[s] + " , ");
        if((s+1)%3 == 0) document.write("<br>");
}//for
        
}//function kansu()

  • 全体のソースコードです。
  • ちょっとわかりにくい??
<script type="text/javascript">

java = [
12,1243,4,
3463,85,45,
43,87,67,
253,645,95
];


function kansu(){

        for(i=0; i<java.length-1; i++) {
                for(j=java.length-1; j>i; j--){
                        if(java[j] < java[j-1]){
                                var taihi = java[j];
                                java[j] = java[j-1];
                                java[j-1] = taihi;
                        }//if
                }//for
        }//for
        
for(s=0; s<java.length-1; s++){
        document.write(java[s] + " , ");
        if((s+1)%3 == 0) document.write("<br>");
}//for
        
}//function kansu()

</script>

<form><input type="button" onclick="kansu()" value="バブルソート"></form>
スポンサーサイト
感謝の言葉
  • ありがとうございました
  • 心より感謝を申し上げます
  • 本当にいつもありがとう
  • ホンマありがとう!
  • 大切な~~に感謝します
  • おおきに!
  • 感謝をこめて
  • いろいろとありがとう
お祝いの言葉
  • 素敵な一日をお過ごしください
  • お誕生日おめでとう
  • お幸せに
  • ご健闘をお祈りいたします
  • あなたは特別な人
  • おめでとうございます
  • 心からお祝い申し上げます
  • 幸福を祈って・真心をこめて
  • 愛をこめて
  • 健康に気をつけて
  • 健やかなご成長をお祈りします
  • 御社の限りないご発展を祈願いたします
  • 心から祝福申し上げます
| ホーム |

カレンダー

02 | 2008/03 | 04
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

最近の記事

月別アーカイブ

タグリスト

ブログ内検索

カテゴリー

RSSフィード

リンク

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。