2012-10-20 91 views
2

如何按monge隨機順序排序整數(0,1,2,3,4,5)數組(最奇數到最小奇數,然後最小甚至最大)像(5,3,1,0,2,4)。我無法解決這個問題。數組C++的唯一排序順序

我用盡爲止:

void mongeShuffle(int A[], int B[], int size) 
{ 
    int i = 0; // i is the index of the arr 
    while(i < size) 
    { 
     if(A[i] % 2 == 1) 
     { 
      B[i] = A[i]; 
      i++; 
     } 
     else 
     { 
      B[i] = A[i -1]; 
      i++; 
     } 
    } 
} 
+1

你可以使用排序功能嗎? – nhahtdh

+0

不允許使用原始函數 – kxf951

回答

2

您需要重新洗牌基於索引爲偶數或奇數,而不是值。

#include <iostream> 

void mongeShuffle(int A[], int B[], int size) 
{ 
    for(int i = 0; i < size; ++i) 
    { 
     if(i % 2 == 0) 
     { 
      B[(size+i)/2] = A[i]; 
     } 
     else 
     { 
      B[size/2 - i/2 - 1] = A[i]; 
     } 
    } 
} 
+0

這確實有幫助,但到目前爲止它的工作順序相反,因此:(0,1,2,3,4,5,6)會以(1,3,5 ,0,6,4,2)而不是(5,3,1,0,2,4,6) – kxf951

+0

@KevinFoldes:謝謝你指出。固定。 (: – Mankarse

4

c++你可以使用algorithm頭使用sort功能,並提供自定義的比較。類似這樣的:

#include <algorithm> 
#include <iostream> 

bool my_comp (int a, int b) 
{ 
    if(a%2 == 1 && b%2 == 1) 
    { 
     // Both odd 
     return a > b; 
    } 
    else if(a%2 == 0 && b%2 == 0) 
    { 
     // Both even 
     return a < b; 
    } 
    else return a%2 == 1; 
} 

int main() 
{ 
    int A[] = {0,1,2,3,4,5}; 
    std::sort(A, A + 6, my_comp); 

    for(int i: A) 
    { 
     std::cout << i << std::endl; 
    } 
} 
+0

)數組中有6個元素 - 不是5.最後一個else應該是'else return a%2 == 1' ... – PiotrNycz

+0

4測試用例:既奇數,均勻,a是奇數b是偶數,並且a是偶數b也是奇數 – texasbruce

+0

@PiotrNycz,謝謝,更正。在手機上永遠不會編碼:-) – Vikas