码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-01 19:59:25      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

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

初级程序员代码:

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

 

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

标签:

原文地址:http://www.cnblogs.com/happygirl-zjj/p/4613841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!