2012-10-20 60 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