k5054
Если у вас есть задание написать такую функцию, или если вы заинтересованы в написании функции сортировки для ваших собственных интересов, то вы должны следовать совету Грега и попытаться разработать свое собственное решение. Однако если вам просто нужно выполнить сортировку, то вам, вероятно, следует использовать средства, которые предоставляет вам C++. Есть sort
алгоритм в STL, который можно использовать для сортировки массива для вас, вам просто нужно написать подходящую функцию, которая вернет true, если ее первый аргумент следует считать "меньше" первого элемента.
Теперь мы знаем, что можем определить, является ли число четным или нечетным, применяя mod 2, если ответ 0, то число четное, а 1-нечетное. Поскольку мы хотим отсортировать четные числа перед нечетными, если мы перевернем знак четных чисел, то четные числа будут отрицательными, поэтому они будут сортироваться как меньшие, чем нечетные числа. Есть еще одна последняя проблема, и это если оба числа, переданные в нашу функцию, четны, то нам нужно убедиться, что мы изменим наше сравнение так, чтобы, например, 2 сортировалось как меньше 4.
Сложив все это вместе, мы получим вот что:
#include <iostream>
#include <algorithm>
bool odd_even_sort(int i, int j)
{
i *= (i%2) ? 1 : -1; // if i is even, flip the sign
j *= (j%2) ? 1 : -1; // ditto for j
if(i <= 0 && j <= 0) // if i and j are both even, reverse comparison
return i > j; // so e.g. -2 sorts as "less" than -4
return i < j;
}
// example of use:
int main()
{
int ints[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// call std::sort() to re-arrange the array
std::sort(ints, ints+10, odd_even_sort);
// display array:
for(int i = 0; i <10; ++i)
std::cout << ' ' << ints[i];
std:: cout << std::endl;
return 0;
}
output is : 2 4 6 8 10 1 3 5 7 9