Wikipediaの定義によると:
挿入ソートは、いずれかによって入力データ1を得る徐々に順序付けられた出力シーケンスを生成するために、反復アルゴリズムです。各反復アルゴリズム入力シーケンスから採取された要素は、順序付けられたシーケンス内の正しい位置に挿入します。だから、順序内のすべての要素になるまで反復。
反復マージソートのアクションを以下:まず、Nの元のシーケンスとして一つだけの要素が含まれている、と注文したマージの各反復2つの隣接する配列、注文最後まで一つだけのサブシーケンスを命じましたシーケンス。
今、元の配列とソートアルゴリズムによって生成された中間のシーケンスを与えられ、アルゴリズムは、ソートアルゴリズムのかどうか、あなたがどのような種類を決定しますか?
入力フォーマット:
入力の最初の行では、正の整数N(与えられ≦100)、続いてN個の整数の元の配列の列を与え、最後の行は、ソートアルゴリズムの中間体によって生成されたシーケンスを与えます。標的配列が昇順にソートされているものとします。スペースで区切られた数字の間。
出力フォーマット:
第一出力線1は、Insertion Sort
挿入ソートを表し、またはMerge Sort
マージソートを表し、次いでランク付けアルゴリズムは、2行目の結果のシーケンスを繰り返し出力します。トピックは、各テストの結果が一意であることを確認してください。数字の間にスペースで区切って、最初から最後までのラインは、余分なスペースを持っていないかもしれません。
サンプル入力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
#include <iostreamの> する#include <アルゴリズム> 使用して 名前空間STD; INT N-、 ボイド insort(INT A []、int型B []){ int型キー= 0 ; // 1中間シーケンス、キーセットに嵌合し、プロセスラインの終了後出力におけるスケジューリング のための(int型 I = 2 ; I <= N; Iは++){ // 挿入ソートを通過することなく2、末端がNであり、そうでなければテストポイント2を起動 (A +、AソートI) ; IF (キー){ COUT << " 挿入ソート" << ENDL; COUT<< [ 0 ]; のための(INT J = 1 ; J <N- J ++ ) COUT << " " << [J]; リターン; } IF(等しい(A、+ N-A、B)) // アレイの機能を比較して等しい キー= 1 ; } } ボイド mesort(INT []、int型B []){ int型キー= 0 ; のための(INT I = 2 ;; I * = 2){ // ここで状態を終了していない、なぜならN-ソート時i>は再び繰り返されたとき のために(INT J = 0 ; J <N - 、= J + I){ ソート(A + J、A +(J +私は<N-I + J :? N-)); // 決定注境界を } IF (キー){ COUT << " マージソート" << ENDL; COUT << [ 0 ]; のための(INT J = 1。 ; J <N-; J ++ ) COUT << " " << [J]。 返します。 } 場合(等しい(+ N、B)) キー = 1 。 もし(I> n)を 破ります。 } } int型のmain(){ CIN >> N。 INT A1 [ 100 ]、[A2 100 ]、[B 100 ]。 以下のために(int型 i = 0 ; iがn <; iは++ ){ CIN >> A1 [i]は、 A2 [I] =のA1 [I]; } のために(int型私= 0 ; 私は、n <; 私は++ ) CIN >> B [I]を、 insort(A2、B)。 mesort(A、B)。 リターン 0 ; }
ソースコード:https://blog.csdn.net/qq_40946921/article/details/81293371