8645マージソート(非再帰的アルゴリズム)
制限時間:1000msのメモリ制限:1000K
質問:プログラミング言語のタイトル:無制限
説明
結果は、関数でマージソート(非再帰的アルゴリズム)を達成し、ソートあたりの旅行を出力します
入力
最初のライン:キーボード入力のキー数nソートする 第二列:ソートするn番目の入力キー、スペースで区切られたデータを
出力
データ間のスペースで区切っトリップごとにソートされた出力結果の各行、
サンプル入力
10 5 4 8 0 9 3 2 6 7 1
サンプル出力
4 5 0 8 3 9 2 6 1 7 0 4 5 8 2 3 6 9 1 7 0 2 3 4 5 6 8 9 1 7 0 1 2 3 4 5 6 7 8 9
//以下のコードACです
書式#include <iostreamの>
名前空間stdを使用。
プロセスボイド(N-INT);
ボイドマージ(ORI INT []、INT N-);
ボイドnewMerge(ORI INT []、INT tmpArray []、int型のS、N-INT); //関数を用いて、マージを完了する時間がありません2つのソート配列の隣接するマージ
ボイドマージ(INT ORI []、 INT tmpArray []、、、INT半ばを左から右int型INT); // 配列の2つの行をマージtmpArrayに分類される
(ボイド出力INTオペアンプ[]、int型N) ; // 出力アレイの
メインINT()
{
int型のn;
cinを>> N;
工程(N)
0を返します。
}
プロセスボイド(N-INT)
{
; [N- + 1] ORI int型
のための(INT I = 1; I <= N - 、Iは++)
CIN >> ORI [I]は、
IF(N> 1)//もし複数マージし、ランク付けする要素
マージ(ORI、n)を; //元のマージを呼び出す
ほか
、出力(ORI、N-)
}
マージボイド(ORI INT []、INT N-)
{
int型= S. 1、tmpArray [N- + 1]; // Sが各方法は、2つのアレイ、アレイ(S未満持続することができる配列の長さ)をマージする時間の長さであり
、一方(S <N-)
{
newMerge(ORI、tmpArray、S、N-);
S = 2 *;
}
}
newMergeボイド(ORI INT []、INT tmpArray []、INT S、N-INT)
{
//隣接する2つのソート配列が合流して、この関数をマージを完了しない場合
、私は= int型1;
ながら(私は< = N - 2 * S + 1 )//は、 1 <= N導出することができる-私は2Sを+使う
{
、I 2 * S + 1 - -マージ(ORI、tmpArray、I、S I + 1);
I = + S※2;
}
IF(I <= N - S)//すなわち、不十分な長さSの背面の最後の2つの
マージ(ORI、tmpArray、I、I S + - 1、N-);
他//それは[]内に、端部に複数のだけ不十分長さを統合し、単にtmpArrayに直接コピーされる
ため(; I <= N - 、Iは++)
tmpArray [I] = ORI [I];
//これが完了しますトリップマージ
//再びここで壁紙を符号化するために[] ORIコピー
のために(INT = 0 K; K <= N; ++ K)
ORI [K] = tmpArray [K];
出力(ORI、N-);
}
マージボイド(ORI INT []、INT tmpArray []、左INT、MIDをINT、右INT)
{
//配列のマージ二列のコピーに戻り、次いでtmpArray []にソートされ、ORI []の
INT tmpCnt =左; //一時カウンタ
INT rightStart =ミッド+ 1; // MIDが実際leftEnd
一方(左<= MID && Rightstart <=右)
{
IF(ORI [左] <= ORI [Rightstart])
tmpArray [tmpCnt ++] = ORI【左++];
他
tmpArray [tmpCnt ++] = ORI [Rightstart ++];
}
//誰以下にtmpArray []の中に直接入れ複数
一方(左<= MID)
tmpArray [tmpCnt ++] = ORI [左++ ];
一方(Rightstart <=右)
tmpArray [tmpCnt ++] = ORI [Rightstart ++];
}
ボイド出力(OP []、INT nを整数)
{
ための(I = 1をint型; ++ I; iが<= N)
COUT << OP [I] << "「。
coutの<<てendl;
}
ます。https://www.cnblogs.com/arcfat/archive/2012/12/06/2805701.htmlで再現