質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

6回答

915閲覧

ソートのアルゴリズムを論理的に説明したい

okiasu

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2017/05/24 14:51

###ソートのアルゴリズムを論理的に説明したい
C#の勉強中なのですが、
これまでプログラミングはもとより、
論理的思考や、アルゴリズムについても知識のない状態です。

現在は並び替えの問題に取り組む中で、
並び替えとは、どういうものか、どう考えれば良いか、
根本的な部分が足りないと感じています。

###問題
ダンボールが3箱あり、それぞれ重さが異なります。
天秤を使い、重さを比べ、軽い順に並べます。
効率よく、並び替えるには、どういう方法があるでしょうか?

###不明点
上記の問題は、ごく簡単な日常でもありえる並び替えだと思います。
漠然とは、理解しているつもりですが、
ですが、それを論理的に考え、明確な根拠のある
説明の仕方がわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

目的が何かということを意識してください。

並び替え(ソート)の目的はただ一つ、小さいものから大きいものの順に並べることです。
その目的を細分化していきます。細分化の仕方はいくつかあるでしょう。例えば
0. 最大、あるいは最小のものから順次決定して並べる
0. 小さなグループに分けて、その中で並び替えてから組み合わせる
0. 部分的に整列させて、新しいものが整列済みの列の中のどこに入るかを調べる

という方法が考えられます。1を具象化したのが選択ソートやバブルソートであったり、最大の決め方特殊なものならヒープソートになったりします。2を具象化するとマージソートなどに、3からだと挿入ソートになります。
場合によってはこれらが組み合わさることになります。1と2を組み合わせると、「ある値より大きいか小さいか」というグループ分けの仕方になり、クイックソートなどになります。

投稿2017/05/24 15:26

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上記の問題は、ごく簡単な日常でもありえる並び替えだと思います。

漠然とは、理解しているつもりですが、
ですが、それを論理的に考え、明確な根拠のある
説明の仕方がわかりません。

そのまま日常の話として、天秤を使って並び換える方法を他の人、例えば今日入ってきた何も知らない新人に説明しなければならなくなった、として考えることになります。

お気付きのように、「他の人から説明の仕方」を教えてもらったとしても、自分で考えることができるようにはなりません。

質問文を「自分なら、このように説明するが、どの辺が伝わり難いか」という形に変えると、より有意義な回答を得ることができるでしょう。

投稿2017/05/24 14:59

koko_u

総合スコア936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ダンボールの数がもっと多ければ様々なソートアルゴリズムがありますが、三つしかない、さらに天秤を使うことが決まっているのでは使えるアルゴリズムは限られます。
二回目に重いほうから比べるか軽い方から比べるかくらいの違いしかないでしょう。

自分の手を使わずに言葉だけで人にやらせるとしたらどうするか、その手順をそのまま説明すればいいだけだと思います。
というか、本当にこれが説明できないとしたらかなり問題です。おそらく幼稚園児でもできる子は多いと思います。難しく考えすぎてはいませんか?

とりあえず、天秤というのは二つの物の重さを比較する道具です。
最初の手順は、三つのうち任意の二つを選んで順位をつけるという一つの選択肢しかありません。
次の手順は、軽い方か重い方と残った一つを比べて順位をつけるという二つの選択肢しかありません。
これで三つの順位が決まる場合があります。
決まらなかった場合、もう一度天秤を使うことによって順位が決まります。
手順は多くて三つしかありません。考えることを放棄してはいませんか?

投稿2017/05/24 15:49

編集2017/05/24 16:14
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ソート
Wikipediaのページです。図も入っていておすすめです。
コードが書いてある場合もあり、自分で作ってみることもできます。
私はバブルソートと奇偶転置ソートしか作ったことがありません。

1.段ボール箱を適当に並べる。
2.左端から順に2つとって天秤にのせ重い方を右側に軽い方を左側に入れ替える。
3.入れ替わらなくなるまで繰り返す。

投稿2017/05/25 01:21

編集2017/05/25 01:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okiasu

2017/05/25 06:01

ありがとうございます。 Wikipediaも確認しました。
guest

0

高々3つだと効率も何もないんですが、それはさておき。
分からなくなったら、実際に実験をしてみるのが良いです。ただしその際に手順を一つ一つ確認して。そうすると無意識のうちにやっていることに気付けます。
まあ荷物を用意するのは面倒ですから、トランプを用意するのが良いですかね。手軽ですし。

余談:
昔新人教育の講師をやらされた時に、ソートを教えるのにトランプを使って、バブルソートを実際に手札でやらせてみたら、わりと理解が早かったですね。
手持ち用の2セットと講義用の巨大サイズ1セット、領収書切るわけにもいかず、自腹切りましたけど……

投稿2017/05/25 02:10

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2017/05/24 14:59

hidori

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問