2017-02-09 6 views
1

私はアルゴリズムと呼ばれる基本クラスに参加しています。ソートアルゴリズムを研究しています。挿入ソートアルゴリズムの例として以下の擬似コードが与えられました。しかし、私はそれが間違っていると思います。 - 最初のカードは「すでに注文」されているので、それはそれ以来、2から始まり insertionソートアルゴリズム:挿入ソート - 講義で与えられた擬似コードが正しくないようです。

私は最初の行を理解する:あなたはまた、このスクリーンショットでは、講義ノートにここでそれを見ることができます

For i in {2,..,n}: 
    For j in {i,..,2}: 
     If a(j)<a(j-1), swap a(j) and a(j-1) 
     Else, Break 

これまでのところ唯一のカードです。

2行目は間違いですか?どのように私は私が2からjを使用することができますか?もちろん、これは将来的に成り立つことはありません。また、ブレークインが少なくインデントされるべきではありませんか?だから2つのタブの代わりに1つのタブだけ?ここで

編集

は、アルゴリズムの "主な考え方" です。あなたが見ているように、インデックスjの範囲はここから間違っているようです。 insertion2

EDIT2 だからここに私はこの擬似コードを読んで、私の心の中で何が起こるかを記述してみてください: 私はリスト(5,3,8,7,2,4,1,6)があるとします。私は|と書いて "手"をデッキから分離し、また、私がどの要素を見ているのかを強調するために5_と書きます。だからここに私達は行く:

i = 1, (5|3,8,7,2,4,1,6) 
i = 2, (5,3|8,7,2,4,1,6), now j in {2}, so we only have j = 2, a(j=2)=3 < a(j=1)=5, hence swap 3 with 5 
i = 3, (3,5,8|7,2,4,1,6), j in {2,3}, so j=2 gives a(j=2)=5 !< a(j=1)=3 SO WE BREAK! 
i = 4, (3,5,8,7|2,4,1,6), j in {2,3,4}, so j = 2 gives a(j=2)=5 !< a(j=1)=3, SO WE BREAK 

、あなたは我々が2から開始するので、我々はそれを破るため、これは常に今から起こるのだろう見るように!私達はちょうどあなたが以下の仮定を行う場合は、コードが有効である条件

+0

は、これは擬似コードであるので、伝える方法はありません、ステップ方向は 'For'ループにあるもの...あなたはコードが正しいことを確認することができます2番目の 'For'の場合、ステップサイズは' -1'です。しかし、これはあまり曖昧な擬似コードではありません。編集した後、2番目のループで後方にステップしたいことは明らかです。 – BeyelerStudios

+0

@BeyelerStudios、私は否定的なステップについて考えました。しかし、それはまだ動作しません。あなたが「新しいカードを手札に加える」たびに、このカードを手札の中の他のすべてのカードと一緒にチェックする必要があります。 –

+0

また、カードを挿入するたびに、すでにチェックしたカードをすべてもう一度チェックする必要があるため、時間が無駄になります。$ 2 $は確かに間違いです –

答えて

3

に違反するので、そうでもjの増加のための整数の集合かかわらず、我々は、さらに2を行くことができない。

  • の配列を長さNはインデックスを持ちます。1..N
  • forループは、方向に関係なく指定された範囲をカバーします。したがって、for x in {a,...,b}a, a+1, a+2, ..., b-1, b if a <= bになりますが、a, a-1, a-2, ..., b+1 b if a >= bになります。
2

2番目の行は、i番目の要素(外側ループで実行中)を取り込み、その前のパーティションに挿入しようとしているので間違いではありません。この要素をソートする前に、この要素をパーティションと比較する必要があります。

このSOポストが良い可視化を持っています Insertion Sort vs. Selection Sort

+0

申し訳ありません "outter loop"と "before it partition"の意味を理解できません。名前のとおり、 –

+0

は**ソートされたリストに要素を挿入**します。これは、最初の要素が既にソートされているため、常に配列の2番目の要素から始める理由です。だから、私はこの前の「パーティションの前にある」という意味は最初の要素に過ぎません。 –

+0

しかし、2から始まって私に到着するのは、それがアクションの膨大な繰り返しではないのでしょうか?新しい要素をリストに挿入するたびに、リスト内の各要素をもう一度チェックします。これは、既に実行していたものです。 –

関連する問題