下面的代碼被用來以升序或降序的順序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