【課題】入力アレイ内の数字の順序を調整する機能を実現するための整数の配列、そのようなアレイの前半の全ての奇数部分つまり、全ての偶数列の後半に位置し、その奇数および偶数、奇数と偶数のを保証するために相対位置を変更しません。
まず、我々はすぐに奇数と偶数の統計はそれぞれ、補助配列を使用して考えるだろう、と2つの配列をマージする[思考]!私たちは元の配列を使用することができます奇数列のようなだけのアレイを使用して、2つの配列を作成する必要はないことに注意してください!
1 クラスソリューション{ 2 公共: 3。 ボイド reOrderArray(ベクトル< INT >・アレイ){ 4。 ベクトル< INT > も(array.size()); 5。 INT I = 0、J = 0 ; // オリジナルのためのIの配列インデックス、jは補助配列のインデックスである 6。 ための(自動NUM:配列){ 7。 IF((&NUM 1)== 1 ){ 8。 配列[I ++] = NUM; 9。 } 他{ 10 でも[J ++] = NUM; 11 } 12 } 13 のために(INT K = 0 ; K <Jあり、k ++ ){ 14 、配列[iが++] = さえ[K]。 15 } 16 } 17 }。
私たちは余分なスペースの複雑さは、それを使用していないことができませんか?もちろん、原因要求の対象に奇数と偶数の相対順序は、その安定性の一種で、同じままですが、前に共通のソートアルゴリズムの理解した後、挿入ソートを知って安定しています!私たちは目的を達成できるように、したがって、我々は、すべての偶数位置を、それが奇数の場合、配列全体を横断して、前の交換をすることができます!
1 クラスソリューション{ 2 公共: 3 // 類似挿入ソートは、前に奇数偶数順次に挿入される 。4 ボイド reOrderArray(ベクトル< INT >・アレイ){ 5 ため(INT I = 0 ; I <配列。サイズ(); ++ I){ 6。 IF((配列[I]&1)== 1){ // 現在の値が奇数である場合 7。 ため(INT J = I- 1。 ; J> = 0 ; J、){ 8 IF((配列[J]&1)== 0){ // Iの反復フロント、それは偶数、スイッチであれば 9。 スワップ(配列[J]、配列[J + 1 ]); 10 } 11 } 12である } 13である } 14 } 15 }。