PAT_A1089#を挿入またはマージ

ソース:

PAT A1089挿入またはマージ(25分)

説明:

ウィキペディアによると:

挿入ソートの反復処理し、各反復1つの入力要素を消費し、ソートされた出力リストを成長させること。各反復は、挿入ソートは、入力データから一つの要素を取り除き、それがソートされたリスト内に属する場所を見つけ、そこに挿入します。何の入力要素が残っていないまで、それは繰り返されます。

次のように並べ替えが機能マージ:Nのサブリストにソートされていないリストを分割し、それぞれを含む1つの要素(1つの要素のリストがソートされたと見なされます)。そして、繰り返し、残りの1つだけのサブリストがあるまで新しいソートサブリストを生成するために2つの隣接するサブリストをマージします。

今、一緒にいくつかのソート方法のいくつかの繰り返しの結果であるシーケンスで、整数の初期シーケンスを与え、あなたは私たちが使っている方法を並べ替えている伝えることができますか?

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正の整数与える  Nを(≤)。そして、次の行では、  N個の整数は最初のシーケンスとして与えられています。最後の行は、一部のソート順が含ま  N番号を。標的配列が常に昇順されているものとします。行のすべての数字は、スペースで区切られます。

出力仕様:

各テストケースのために、最初の行に「ソート挿入」のいずれかで印刷したり、部分的な結果を得るために使用される方法を示すために「マージソート」。そして、2行目の1回の以上の繰り返しと出力resulingシーケンスのために、この方法を実行します。答えは各テストケースに対して一意であることが保証されています。行のすべての数字は、スペースで区切る必要があり、ラインの末尾に余分なスペースがあってはなりません。

サンプル入力1:

10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0

サンプル出力1:

Insertion Sort
1 2 3 5 7 8 9 4 6 0

サンプル入力2:

10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6

サンプル出力2:

Merge Sort
1 2 3 8 4 5 7 9 0 6

キー:

  • 挿入ソートとマージソート

注意:

  • 注を参照してください。

コード:

1の#include <cstdioを>
 2の#include <アルゴリズム>
 3  使用して 名前空間STDを、
4  のconst  int型 M = 1E3。
5  
6  INT )(メイン
 7  {
 8  の#ifdef ONLINE_JUDGE
 9  の#else 
10      freopenは(" Test.txtを"" R " 、STDIN)。
11  #endifの // ONLINE_JUDGE 
12  
13      int型N、原点[M]、ソートされた[M]。
14      のscanf(" %d個"、&N);
15      のためには、int型 i = 0 ; iがn <I ++は16          のscanf(" %dの"、&起源[I])。
17      のためには、int型 i = 0 ; iがn <I ++は18          のscanf(" %dの"、およびソート[I])。
19台の     int型の POS = 1 20      一方(posが<N && [POS-ソート1 <=ソート[POS])   // 可以取等
21台の          POS ++ 22      int型 PT =POS;
23      一方(POS <N &&ソート[POS] == 起源[POS])
 24台の          POS ++ 25      であれば(== POS N)
 26      {
 27          のprintf(" 挿入ソート\ n " );
28          一方(PT> 0 &&ソート[PT- 1 ]> ソート[PT])
 29          {
 30              スワップ(ソート[PT- 1 ]、ソート[PT])。
31              pt-- 32          }
 33      }
 34      
35     {
 36          のprintf(" \マージソートN " );
37台の          POS = 1 ; PT = 1 38          一方(PT)
 39          {
 40台の              POS * = 2 ;
41              のためにint型 I = 0 ; iがN <Iは+ = POS)
 42              {
 43                  のためのint型 J = I + 1 ; J <分(N、I)は、POSを+ J ++ 44                      であれば(ソート[J- 1 ]> 並べ替え[J])
 45                         PT = 0 ;
46              }
 47          }
 48          のためのint型 I = 0 ; iがN <; iは+ = POS)
 49              ソート(I +ソートされ、(iは+ +分をソート)POSを、N)。
50      }
 51      のためのint型 i = 0 ; iがn <; I ++ 52          のprintf(" %d個の%のC "、ソートされた[i]は、I == N- 1' \ n ''  ' )。
53  
54      リターン 0;
55 }

 

おすすめ

転載: www.cnblogs.com/blue-lin/p/11408491.html