剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面

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

 

这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑我们将数组从前开始索引只要发现偶数这将偶数取出来并且将偶数后面的元素全部前移一个然后将偶数插入到最后,这样扫描一遍之后就将偶数全部放在了后半部门,奇数放在了前半部分。但是效率不好每次遇到偶数都要移动偶数后面的所有元素再加上遍历数组的时间则达到了O(n2)

 

我们可以用两个索引或者指针,一个指向数组的末尾一个指向数组的开始。

1.前面的索引向后移动直到遇到偶数,后面的索引向前索引直到遇到奇数

2.交换两个元素

3.重复步骤1,2知道后面的的索引与前面的索引相遇或者在前面的索引之前则结束。

 

实现代码如下:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 void RecorderOddEven(int *pData,int length)
 5 {
 6     int p1,p2;
 7     p1=0;
 8     p2=length-1;
 9 
10     while(p2>p1)
11     {
12         while(p2>p1&&pData[p1]%2!=0)
13             p1++;
14         while(p2>p1&&pData[p2]%2==0)
15             p2--;
16 
17         int temp;
18         temp=pData[p1];
19         pData[p1]=pData[p2];
20         pData[p2]=temp;
21     }
22 }
23 
24 int main(int argc, char* argv[])
25 {
26     int nums[5]={1,2,3,4,5};
27     int length=5;
28     RecorderOddEven(nums,length);
29     for(int i=0;i<length;i++)
30     {
31         cout<<nums[i]<<",";
32     }
33     cout<<endl;
34     return 0;
35 }
复制代码

 

运行截图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值