n> 0の整数の循環配列vを指定すると、1つの要素を2つ先の要素と入れ替えることができます。
IソートV移動のシーケンスを印刷したり、それは(C言語では)不可能だと言う
例なければならない:
初期V = [8,0、5、9、-1、5]
Vに対するMを適用した後、[4]:V = -1、0、5、9、、5]
VにMを適用した後、[3]:V = [-1、0、5、 ,8,
これは現在0の位置からソートされています。
- 奇数の要素がある場合、任意の要素を任意の位置に移動できます。
- 奇数の要素がある場合は、任意の要素を任意の位置に移動できます。
- 偶数の要素の場合、要素を奇数と偶数の位置間で移動することはできないため、常にソートすることはできません(例:v = [ - 1、-2、1、7]であり、-2 inが奇数位置であるが偶数位置にある必要があるため不可能である)。
私はこのことについて考えてきた:
- "AUX" のように、彼らの真の隣人と数字を入れてAUXILIAR配列を使用します。[
V = 8、0、5、9、-1、5 、6] - > aux = [8,5、-1、6、0、9、5]
これでAUXで簡単に隣接番号を入れ替えられます。
- auxの位置 "i"に関する最終的な設定は、
v = [8、0、5、9、-1、5,6] - > aux = [8,5、-1、 0、9、5] - > i = [0,2,4,6,1,3,5]
- nが偶数の場合、vをソートするために2つのauxが存在します。奇数と偶数の間の数字を移動するので、2つの問題があります。例:
v = [8,0,5,9、-1,5]
aux-even = [8,5、-1] - i-even = [0,2,4]
aux -odd = [0,9,5] - > i-even = [1,3,5](vの点で考えると)
ここからどこへ行くのか、それとも良い道であればわからない走る。
アイデアや助けを歓迎します。
EDIT
Iが奇数の場合のAlexDによって提案されたアルゴリズムをシミュレートしようとしている[8、0、5、9、-1、5、6]
Vソート
V =を= [-1、0、5、5、6、8、9]
それらにキー(-1、)、(0、)、(5、)を割り当て、( 5,)、(6,)、(8,)、(9,)。元の順序に
:
(8,7)(0,5)(5,2)(9,4)( - 1,1)(5,6)(6,3)
キーの間に1を使用するバブルソートを使用します。 (0、5)(5、2)(9,4)(-1,1)(5,6)(6,3)
,(0,0)(-1,)(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26) (5,4)(8,)(5,6)(6,3)
(0,5)(-1,1)(9,4)(6,)(5、6)(8、)
(-1、)(0,5)(5、2,1,230,588,5)(0,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) (5,6)(5,6)(5,6)(5,6)(8,7)
(-1、 7)
しかし、番号はソートされません。私は何が欠けていますか?整数の円形配列を1つの要素に入れ替えて並べ替え
答えて
簡潔にするために、一般化が容易な具体的なケースでアイデアを説明しましょう。
場合でも
は、我々は8つの要素を持っているとしましょう。その後、我々ソートサブアレイ(奇数および偶数インデックスを有する)を別々に2つのステップ2でバブルソートを使用して、そして
a1 a2 a3 a4
b1 b2 b3 b4
を有する得られた配列a1 b1 a2 b2 a3 b3 a4 b4
をソートするが起こった場合、我々が行われています。それ以外の場合、解決策はありません。
奇数の場合
は、あなたが、7つの要素を持っているとしましょう。お気に入りの方法で並べ替えます。次に、新しいことでペアを並べ替える
a1 a2 a3 a4 a5 a6 a7
2 7 3 5 1 4 6
:次に
a5 a4 a1 a7 a3 a2 a6
1 5 2 6 3 7 4
元の順序に戻ってくる:者は、ソートした後、彼らはこのようなすべての要素に
a5 a4 a1 a7 a3 a2 a6
Assignキーあるとしましょうキー(1
- 7
)を使用して、バブルソートを使用し、毎回1つの要素にジャンプします。キーがソートされるとすぐに、a1
... a7
の値が目的地になります。
ソートされた配列とそれに対応するキーが
0 1 5 5 9
1 4 2 5 3
が今度は(そのキー我々は1ステップごとの比較ペアが<>
である)キーでペアをソートしてみましょうだろうのは、配列
5 1 5 9 0
で説明してみましょう
<5 2> (1 4) <5 5> (9 3) (0 1) // starting the first loop
(5 2) (1 4) <5 5> (9 3) <0 1>
(5 2) <1 4> (0 1) (9 3) <5 5>
(5 2) <5 5> (0 1) <9 3> (1 4)
<5 2> (9 3) <0 1> (5 5) (1 4) // (5 5) is in its final position, starting the second loop
(0 1) (9 3) <5 2> (5 5) <1 4>
(0 1) <9 3> (5 2) (5 5) <1 4>
<0 1> (1 4) <5 2> (5 5) (9 3) // (1 4) in its final position, starting the third loop
(0 1) (1 4) <5 2> (5 5) <9 3>
<0 1> (1 4) <5 2> (5 5) (9 3) // (9 3) in the final position
(0 1) (1 4) (5 2) (5 5) (9 3) // (0 1) and (5 2) are in final positions
共有いただきありがとうございます。私はそれを理解しようとしている。 –
@ N.Kitaご不明な点がありましたらお気軽にお問い合わせください。私が今日オフになったら、明日戻ってきます。 – AlexD
私は奇妙なケースのソートを理解していません。 :/ –
- 1. 整数配列の配列を素早く並べ替える
- 2. 複数の要素を持つ配列を並べ替える
- 3. numpy ndarrayの並べ替えと整形の要素
- 4. Symfonyフォーム - CollectionType要素の並べ替え/並べ替え
- 5. 配列形式と並べ替え
- 6. 配列の並べ替え
- 7. 指定された並べ替えオプションを使用して2つ以上の "列"(キー)に複数の配列の並べ替えを並べ替え
- 8. 列に基づいた2D整数配列の並べ替え
- 9. 配列の複素数配列を値で並べ替え
- 10. 挿入挿入して並べ替えで並べ替え
- 11. 整数の2d文字列配列の並べ替え
- 12. 要素を削除した後に配列の並べ替え
- 13. 複数配列の並べ替え
- 14. トリム並べ替え配列
- 15. Jsonpath並べ替え配列
- 16. 整数フィールドによるオブジェクト配列の並べ替え
- 17. Angular2またはNodeJs:別の配列に基づくJSON要素の並べ替え/並べ替え
- 18. RubyでTSortを使用して配列の並べ替えと並べ替え
- 19. 配列を数値で並べ替え
- 20. 2D NumPy配列を列の1つで並べ替えます。
- 21. 1つの小節で要素を並べ替える方法
- 22. 並べ替えられたキーを持つ別の配列で配列を並べ替える
- 23. Javaは両方の整数配列を並べ替えます
- 24. 並べ替えの方法配列インデックスで並べ替えられたリスト
- 25. ツリー並べ替え中に配列が並べ替えられない
- 26. SKShapeNode要素の配列を並べ替え
- 27. 配列の並べ替えと要素の移動
- 28. DataMapperの要素を並べ替える
- 29. アイソトープコンテナ内の要素を並べ替え
- 30. ヒープの並べ替えと挿入の並べ替え
これは円形なので、2回(2回目から5回目まで) –
ありがとう、@SectoKia。実際には、4からv [0]、v [2]、v [4]です。 –