忍者ブログ

からすまる日誌

2020040602

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2020040602

バブルソートをやるよ
 
250p
順番に比較
$proto = [7,4,1,8,5,2,9,6,3,0];
1巡目
7と4を比較して大きいほうを右に
4と1を比較して・・・
最後まで
 
2巡目
最後の一つを除いて同じようにやる
 
3巡目
最後の2つはやらないで同じようにやる
 
2重ループになるらしい
 

どん
内側ののforをこうしていたら
   for($i=0; $i<count($hoge); $i++){//1-10巡目
    for($n=0; $n<count($hoge); $n++){//1巡の中で判定する
     //大きいものをどんどん配列の後ろにやる
     if ($hoge[$n]>$hoge[$n+1]){//0番目と1番目を比べて0番目が大きい
      $temp = $hoge[$n];//1番目を臨時保存
      $hoge[$n+1] = $hoge[$n];//0番目と1番目を交代
      $hoge[$n] = $temp;
     }
 
だめでした
 

すこしカンニングしてやってみた
 
  <?php
   $hoge = [7,4,1,8,5,2,9,6,3,0];
   
   for($i=0; $i<count($hoge); $i++){//1-10巡目
    for($n=1; $n<count($hoge); $n++){//1巡の中で判定する
     //大きいものをどんどん配列の後ろにやる
     if ($hoge[$n-1]>$hoge[$n]){//0番目と1番目を比べて0番目が大きい
      $temp = $hoge[$n];//1番目を臨時保存
      $hoge[$n] = $hoge[$n-1];//0番目と1番目を交代
      $hoge[$n-1] = $temp;
     }
    } 
   }
  ?>
 
これならいい
 

先生版
最初は「9回の比較」を行う
7/4 4/1 8/5...みたいに9回
 
phpにはlengthがないので
count関数をつかう
そうすれば配列の長さが分かる
 
   $max = count($hoge)-1;//1回目は9回比較する。
   //2回目以降は「最後の数が一番大きいことはわかっているので最後の比較だけはしない」
   
   for($i=0; $i<$max; $i++){
   
   }
 

$hoge[$i]と$hoge[$i+1]を比べたい
   $hoge = [7,4,1,8,5,2,9,6,3,0];
   
   /*先生版*/
   $max = count($hoge)-1;//1回目は9回比較する。
   //2回目以降は「最後の数が一番大きいことはわかっているので最後の比較だけはしない」
   
   for($i=0; $i<$max; $i++){
    if($hoge[$i]>$hoge[$i+1]){
     //入れ替え
     $temp=$hoge[$i];
     $hoge[$i]=$hoge[$i+1];
     $hoge[$i+1]=$temp;
    }
   }
 
一番大きいのが右端に寄せられた[9]=>9
 

では外側のループをつけよう
 
   $hoge = [7,4,1,8,5,2,9,6,3,0];
   
   /*先生版*/
   $max = count($hoge)-1;//1回目は9回比較する。
   //2回目以降は「最後の数が一番大きいことはわかっているので最後の比較だけはしない」
   
   for($j=$max;$j>0;$j-- ){
    for($i=0; $i<$j; $i++){
     if($hoge[$i]>$hoge[$i+1]){
      //入れ替え
      $temp=$hoge[$i];
      $hoge[$i]=$hoge[$i+1];
      $hoge[$i+1]=$temp;
     }
    }
   }
 
PR

コメント

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
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