zoukankan      html  css  js  c++  java
  • 剑指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 }

    运行截图:

  • 相关阅读:
    未知高度、宽度,垂直水平居中
    js千分位处理
    浮动与两侧皆自适应布局
    html5 canvas 学习笔记(一)
    全面理解javascript的caller,callee,call,apply概念[转载]
    cocos2dx android运行Luac编译后的lua代码
    cocos2dx android lua文件设置问题
    cocos2dx android resources.ap_ does not exist
    Gink掉过的坑(一):将CCTableView导入到lua中
    数据结构之内部排序个人总结
  • 原文地址:https://www.cnblogs.com/vpoet/p/4671742.html
Copyright © 2011-2022 走看看