下面的代码被用来以升序或降序的顺序int数组排序请解释该功能
//codes borrowed from learncpp.com
#include<iostream>
#include<algorithm>
using namespace std;
void SelectionSort(int *anArray, int nSize, bool(*pComparison)(int, int)) {
for(int iii=0; iii<nSize; iii++) {
int nCurrent = iii;
for(int jjj=iii+1; jjj<nSize; jjj++) {
if(pComparison(anArray[nCurrent], anArray[jjj]))
nCurrent = jjj;
}
swap(anArray[nCurrent], anArray[iii]);
}
}
bool Ascending(int nX, int nY) {
return nY>nX;
}
bool Descending(int nX, int nY) {
return nY<nX;
}
bool EvensFirst(int nX, int nY) {
if((nX%2)&&!(nY%2))
return false;
if(!(nX%2)&&(nY%2))
return true;
return Ascending(nX, nY);
}
void PrintArray(int *pArray, int nSize) {
for(int kkk=0; kkk<nSize; kkk++)
cout << pArray[kkk] << " ";
cout << endl;
}
int main() {
int anArray[9] = {3, 5, 1, 8, 9, 4, 6, 2, 7};
SelectionSort(anArray, 9, EvensFirst);
PrintArray(anArray, 9);
return 0;
}
打印结果是9 7 5 3 1 8 6 4 2而不是2 4 6 8 1 3 5 7 9
任何人都可以在这里请解释bool函数EvensFirst是如何工作的?
你是否熟悉'nX%2'的作用?或者更具体地说,如果它的值为零或不为零,它在每种情况下意味着什么? – lurker 2015-04-04 01:42:40
不是,我感到困惑于((nX%2)&&!(nY%2)) – 2015-04-04 01:59:59
'%'是模。 “%2”是模块2(如果将数字除以2,则可以得到其余的结果)。如果'nX%2'为零,那么'nX'就是偶数。如果'nX%2'非零(1),那么'nX'是奇数。所以'(nX%2)&&! (nY%2)'如果'nX'为奇数且'nY'为偶数,则为真,因为零有一个假值,并且1具有真值。 – lurker 2015-04-04 02:01:43