题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
初级程序员代码:
1 void reorderOddEven(vector<int>&data) 2 { 3 unsigned int n = data.size(); 4 int i = 0; 5 int j = n-1; 6 while (i < j) 7 { 8 while (i < j && (data[j]&1==0)) 9 --j; 10 while (i < j && (data[i]&1==1)) 11 ++i; 12 if (i < j) 13 { 14 data[i]^=data[j]; 15 data[j]^=data[i]; 16 data[i]^=data[j]; 17 } 18 } 19 }
可扩展性解法(将判断标准变成一个函数指针):
1 bool isEven(int n) 2 {//如果n为偶数则返回true 3 return (n&1)==0; 4 } 5 void reorderOddEven(vector<int>&data, bool (*fun)(int)) 6 { 7 unsigned int n = data.size(); 8 int i = 0; 9 int j = n-1; 10 while (i < j) 11 { 12 while (i < j && fun(data[j])) 13 --j; 14 while (i < j && !fun(data[i])) 15 ++i; 16 if (i < j) 17 { 18 data[i]^=data[j]; 19 data[j]^=data[i]; 20 data[i]^=data[j]; 21 } 22 } 23 } 24 //调用函数 25 reorderOddEven(data, isEven);
时间: 2024-11-05 14:53:29