面试题14:调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

初级程序员代码:

 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);

 

posted @ 2015-07-01 17:33  Rosanne  阅读(207)  评论(0编辑  收藏  举报