剑指Offer算法实现之十四:调整数组顺序使奇数在偶数前面
来源:互联网 发布:java 流程图框架 编辑:程序博客网 时间:2024/06/04 19:43
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:
类似于快速排序的分区函数。可在线性时间内完成
编译环境:ArchLinux+Clang3.3,C++11
实现一:双指针两端扫描交换法
#include <iostream>using namespace std;void reorder_oddeven(int *a, unsigned len){ if ( !a || len <= 0) return; int *pFirst = a; int *pLast = a + len - 1; while (pFirst < pLast) { while (pFirst < pLast && (*pFirst&0x1)) pFirst++; //后移到第一个偶数 while (pFirst < pLast && !(*pLast&0x1)) pLast--; //前移到第一个奇数 if (pFirst < pLast) swap(*pFirst, *pLast); // 交换偶奇数 }}int main(){ int a[]{1,2,3,4,5,6}; reorder_oddeven(a, sizeof(a)/sizeof(int)); for (auto i : a) { cout << i << '\t'; }}实现二:使用C++11的Lambda表达式扩展
#include <iostream>#include <functional>using namespace std;/* 参数predicate为lambda表达式 */void reorder(int *a, unsigned len, function<bool (int)> predicate){ if ( !a || len <= 0) return; int *pFirst = a; int *pLast = a + len - 1; while (pFirst < pLast) { while (pFirst < pLast && predicate(*pFirst)) pFirst++; // 调用谓词(lambda表达式)判断 while (pFirst < pLast && !predicate(*pLast)) pLast--; if (pFirst < pLast) swap(*pFirst, *pLast); }}int main(){ int a[]{1,2,3,4,5,6}; reorder(a, sizeof(a)/sizeof(int), [](int x){return x&0x1;}); // 匿名lambda for (auto i : a) { cout << i << '\t'; }}
- 剑指Offer算法实现之十四:调整数组顺序使奇数在偶数前面
- 剑指offer(十四)之调整数组顺序使奇数位于偶数前面
- 剑指offer刷题之c++实现的调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面[剑指offer]之python实现
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 剑指offer--调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 《剑指offer》调整数组顺序使奇数位于偶数前面
- 剑指 offer:调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 剑指offer-调整数组顺序使奇数位于偶数前面
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- [剑指offer]调整数组顺序使奇数位于偶数前面
- 剑指offer:调整数组顺序使奇数位于偶数前面
- 【剑指offer】调整数组顺序使奇数位于偶数前面
- 剑指offer|调整数组顺序使奇数位于偶数前面
- Ubuntu12.04.2安装和配置SVN
- UVA 562 - Dividing coins 动规 组合数
- Vacanti:我是如何学习编程的
- Linux常用的网络命令
- ab测试tomcat并发性能(APR模式)
- 剑指Offer算法实现之十四:调整数组顺序使奇数在偶数前面
- Java简单读取classpath下面的文件
- MyEclipse下安装插件方法(properties文件编辑器Propedit为例)
- RHEL 6.4 安装svn和apache
- UVa 10706 - Number Sequence
- 大学毕业时的我-现在的我
- Android sdk manager 显示 Done loading packages 无法继续下载
- UVA 639 Don't Get Rooked
- hdu 1106 排序