zoukankan      html  css  js  c++  java
  • 调整数组顺序时奇数位于偶数前边

    题目描述:

      输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

    算法描述

      我们需要两个指针,其中一个指向开始(begin),另一个指向最后(end),begin指针只向后移动,end只向前移动。这样我们的思想是:begin每次只找偶数就停止,end每次只找奇数,遇到奇数就停止,然后执行交换操作。然后重复上面的操作,直到begin指针超过了end指针结束。

    其实这种思想可以用在很多地方,例如将正数和负数分开等,框架是一样的就是while循环里的条件不同;

    算法实现

     1 #include<iostream>
     2 using namespace std;
     3 
     4 void reOrder(int *data, int length){
     5     if(data == NULL || length < 0){
     6         return;
     7     }
     8     
     9     int *begin = data;
    10     int *end = data + length - 1;
    11     
    12     while(begin < end){
    13         while((*begin & 0x1 )!= 0){
    14             begin++;
    15         }
    16         
    17         while((*end & 0x1) == 0){
    18             end--;
    19         } 
    20         
    21         if(begin < end){
    22             int temp = *begin;
    23             *begin = *end;
    24             *end = temp; 
    25         }
    26     }
    27 } 
    28 
    29 int main(){
    30     int str[] = {1, 2, 3, 4, 5, 6, 7, 8};
    31     int len = sizeof(str) / sizeof(int);
    32     
    33     reOrder(str, len);
    34     for(int i = 0; i < len; ++i){
    35         cout<<str[i]<<' ';
    36     }
    37     
    38     return 0;
    39 }

    参考书籍:

    《剑指offer》

  • 相关阅读:
    mysql索引数据结构
    29. 使用参数化编写自动化测试用例
    28. Python编写自动化测试用例
    27. Unittest单元测试框架的介绍与使用
    26. 什么是单元测试
    25. Postman的使用
    24. 接口测试的意义
    23. requests安装与使用
    22. 如何编写接口文档
    21. Blog接口开发
  • 原文地址:https://www.cnblogs.com/dormant/p/5330295.html
Copyright © 2011-2022 走看看