剑指Offer_面试题14_调整数组顺序使奇数位于偶数前面
来源:互联网 发布:javascript数组赋值 编辑:程序博客网 时间:2024/05/16 06:52
题目描述(剑指offer原版)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
分析:两个指针,p指向头,q指向尾,p向后遍历到偶数,q向前遍历到奇数,交换值,继续++p,--q直到p<q不成立。考虑到扩展性,可以把判断奇偶的功能封装成返回bool的函数,作为参数传入排序函数中。
#include <stdio.h>#include <iostream>//判断函数,本题中为判断是不是奇数bool judge(int a){return (a & 1);}//使奇数位于前半部分,偶数位于后半部分void reorderArray(int *array, unsigned int length, bool (*func)(int)){if (array == NULL || length <= 1) return;int *p = array; //头指针int *q = array + length - 1; //尾指针while (p < q){//p自增直到p指向偶数while (p < q && !func(*p))++p;//q自减直到q指向奇数while (p < q && func(*q))--q;//奇偶交换if (p < q){int temp = *p;*p = *q;*q = temp;}}}void printArray(int *a, unsigned int length){if (a == NULL || length == 0) return;for (unsigned int i = 0; i < length; ++i){printf("%d ", a[i]);}printf("\n");}int main(){int a[] = {1,2,3,4,5,6,7,8,9,10};printArray(a, 10);reorderArray(a, 10, judge); //judge作为参数传入printArray(a, 10);getchar();return 0;}
题目描述(牛客网)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。(也就是说“稳定排序”)
class Solution {public: void reOrderArray(vector<int> &array) { int length = array.size(); if(length == 0) return; vector<int> a; vector<int> b; for(int i = 0; i < length; ++i) { if(array[i] & 1) a.push_back(array[i]); else b.push_back(array[i]); } int count = 0; for(auto e : a) { array[count++] = e; } for(auto e : b) { array[count++] = e; } }};
解法二:STL algorithm.h sort 排序思想,由于要求相对位置不变,因此采用stable_sort稳定排序
class Solution {public: void reOrderArray(vector<int> &array) { stable_sort(array.begin(), array.end(), compare); } static bool compare(int a, int b) { if((a & 1) == 1 && (b & 1) == 0) return true; else return false; }};
阅读全文
0 0
- 剑指Offer_面试题14_调整数组顺序使奇数位于偶数前面
- 剑指offer_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)
- 剑指offer_调整数组顺序使得奇数位于偶数前面
- [剑指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:调整数组顺序使奇数位于偶数前面
- Qt中读写文件的内容-------QFile
- AdroidStudio 出现的Gradle project sync failed. Basic functionality (e.g. editing, debugging) will not w
- 神经网络搭建参数设定
- 练习赛2(补题)问题 G: 建设电力系统【最小生成树kruskal模板题】
- IntelliJ IDEA 常用设置讲解
- 剑指Offer_面试题14_调整数组顺序使奇数位于偶数前面
- 读Zepto源码之代码结构
- Android Studio问题:Intel HAXM is required to run this AVD
- bzoj3998 [TJOI2015]弦论 后缀自动机
- group_concat用法(group by后用逗号拼接某一列的值)
- MySQL语法大全_自己整理的学习笔记
- 关于tomcat下startup.bat双击闪退的问题
- Java并发之CountDownLatch
- Latex的入门教程