#include<iostream>
using namespace std;
void Adjust(int a[], int n, bool(*func)(int))//调整函数
{
int i, j, temp;
i = 0;
j = n - 1;
while (i < j)
{
while (i < j && func(a[i]))
i++;
while (j>i && !func(a[j]))
j--;
if (i < j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
bool isEven(int num)//判断num是否为奇数
{
return num % 2 != 0;
}
bool isNegNum(int num)//判断num是否为负数
{
return num < 0;
}
bool isNumOf1Even(int num)//判断Num对应的二进制数中1的个数是否为奇数数个
{
int count = 0;
while (num)
{
count++;
num = (num - 1)#
}
return count % 2 != 0;
}
int main()
{
int r[10] = { 1, -2, 3, -4, -5, 6, 7, -8, 9, -10 };
int i;
cout << "数组初始情况为: ";
for (i = 0; i < 10; i++)
cout << r[i] << " ";
cout << endl;
Adjust(r, 10, isNegNum);
cout << "进行前负后正调整后,数组变换为: ";
for (i = 0; i < 10; i++)
cout << r[i] << " ";
cout << endl;
Adjust(r, 10, isEven);
cout << "再进行前奇后偶调整后,数组变换为:";
for (i = 0; i < 10; i++)
cout << r[i] << " ";
cout << endl;
Adjust(r, 10, isNumOf1Even);
cout << "再进行二进制数中1的个数进行前奇后偶调整后,数组变换为: " << endl;
for (i = 0; i < 10; i++)
cout << r[i] << " ";
cout << endl;
return 0;
}