void ReorderOddEven(int data[], int n) { if(data == NULL || n < 2) return; int left = 0; int right = n-1; while(left < right) { while(left < right && data[left]&0x01 == 1) ++left; while(left < right && data[right]^0x01 == 0) -- right; if(left < right){ int temp = data[left]; data[left] = data[right]; data[right] = temp; ++left; --right; } } } void Reorder(int data[], int n, bool (*test)(int )) { if( data == NULL || n < 2) return ; int left = 0; int right = n-1; while(left < right){ while(left < right && test(data[left]) == true) ++left; while(left < right && test(data[right]) == false) --right; if(left < right){ int temp = data[left]; data[left] = data[right]; data[right] = temp; ++left; --right; } } }