頼まれたやつ・・・2/19に向けて
こんにちは川です。お久しぶりです。
今回は頼まれて単純ソートと単純選択法とバブルソートの解説をします。
自分も若干の勘違いをしていたので、自分に教えてもらった人は気を付けてください。
計算量などの説明は今回はしませんのでご了承ください。
全部昇順で出力しています。
単純ソート
まぁ普通のやつですね。簡単です。
絵で表すとこんな感じです。
まず一巡目では、配列の最初の要素を決定させます。
配列の0番目の要素と1番目の要素を見比べ小さかった場合入れ替えます。
次は0番目と2番目、0番目と3番目と比べていきます。0番目と9番目を比べ終わると次は1番目と2番目・・・・・と続けていき、最終的に昇順に並べ変わるといったものですね。
やってみた結果は下にのせています。
ソースコードです。
int i,j,tmp;
int box={7,5,2,3,9,1,8,10,4,6};
for(i=0;i<10;i++){
for(j=i+1;j<10;j++){
if(box[i]>box[j]){
tmp=box[i];
box[i]=box[j];
box[j]=tmp;
}
}
}
単純選択法
これも見ればわかりますね。簡単です。
下の絵を見てください。
まず配列の0番目の要素の値を別の場所で保存しておきます。次にその値と配列の1番目の要素を比べ、小さかった場合、値を小さいほうに更新します。それを2番目、3番目と繰り返します。9番目まで比べた後、別の場所に保存していた値と同じ値が入っている配列の値と0番目の値を入れ替えます。これを1番目、2番目と繰り返し、最終的に入れ替わっているというやつです。
これは絵を見たほうがわかりやすいです。
ソースコードです。
int tmp,place;
int box={7,5,2,3,9,1,8,10,4,6};
for(i=0;i<10;i++){
tmp=box[i];place=i;
for(j=i+1;j<10;j++){
if(tmp>box[j]){
tmp=box[j];
place=j;
}
}
tmp=box[i];
box[i]=box[place];
box[place]=tmp;
}
少しややこしいかもしれませんが、簡単です。
これは前の二つと違い後ろから比べていきます。まず配列の9番目の要素と8番目の要素を比べ前の要素が大きいならば入れ替えます。それを0番目まで調べると、配列の0番目の値が決まります。これを繰り返すと最終的に並べ変わるというやつです。
ソースコードです。
int tmp;
int box[]={7,5,2,3,9,1,8,10,4,6};
for(i=0;i<10;i++){
for(j=9;j>0+i;j--){
if(box[j-1]>box[j]){
tmp=box[j-1];
box[j-1]=box[j];
box[j]=tmp;
}
}
}
参考サイトを紹介しておきます
単純ソート
http://lecture.ecc.u-tokyo.ac.jp/~cichiji/cp-05/cp-05-06-2.html
単純選択法
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort3.html
https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
今回は絵を描くのに時間がかかりましたね。物理の勉強を削った罪として、あとでどら焼きをおごってもらいたいです。