【剑指offer】面试题14:调整数组顺序使奇数位于偶数前面
来源:互联网 发布:java反射调用方法 编辑:程序博客网 时间:2024/04/30 12:38
//调整数组顺序使奇数位于偶数前面#include<iostream>using namespace std;//基本解法void ReorderOddEven(int *pData, int length){ if (pData == NULL || length <= 0) { return; } //定义两个指针 int *pBegin = pData; int *pEnd = pData + length - 1; while (pBegin < pEnd) { while ((pBegin<pEnd)&&(*pBegin & 1))//注意添加另外一个限制条件(pBegin<pEnd) { ++pBegin; } while ((pBegin<pEnd)&&((*pEnd & 1) == 0)) { --pEnd; } if (pBegin < pEnd) { int temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; } }}
考虑可扩展性的解法:
如果题目改为:数组按照大小分为两部分,所有负数都在非负数的前面。
或者改为分为两部分,能被3整除的放到前面,不能被整除的放到后面。
该如何解决:
大的逻辑框架不用改变,把判断的标准改为一个函数指针。
可以把整个函数分为两个部分:一是判断数字是在数组中的前半段还是后半段。2.拆分数组的操作
bool isEven(int n)//判断是否为偶数{ return (n & 1) == 0;}void ReorderOddEven(int *pData, int length, bool(*func)(int)){ if (pData == NULL || length <= 0) { return; } //定义两个指针 int *pBegin = pData; int *pEnd = pData + length - 1; while (pBegin < pEnd) { while ((pBegin<pEnd) && (!func(*pBegin)))//注意添加另外一个限制条件(pBegin<pEnd) { ++pBegin; } while ((pBegin<pEnd) && func(*pBegin))//函数指针可以直接当函数名进行使用 { --pEnd; } if (pBegin < pEnd) { int temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; } }}
测试函数:
int main(){ int number[] = {5,2,6,7,8,9,1}; ReorderOddEven(number, 7); for (int i = 0; i < 7; ++i) { printf("%d ", number[i]); } printf("\n"); return 0;}
0 0
- [剑指offer][面试题14]调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14 调整数组顺序使奇数位于偶数前面
- 《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14—调整数组顺序使奇数位于偶数前面
- 《剑指Offer》学习笔记--面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
- 【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】
- 剑指offer面试题14-调整数组顺序使奇数位于偶数前面
- 剑指offer-面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer之面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer之面试题14调整数组顺序使奇数位于偶数前面
- 剑指Offer----面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
- linux常用命令整理
- 免费建站教程
- 系统编程(数据库)
- swift 为方法追加代码
- 程序异常分析指南
- 【剑指offer】面试题14:调整数组顺序使奇数位于偶数前面
- C# 深入理解值类型和引用类型
- Android5.0新特性之Activity切换动画
- CodeForces 586A
- 函数指针
- hello-world
- mysql数据库int(5)以及varchar(20)长度表示的是什么?
- C语言之判断闰年
- 移动无线网络切换矩阵