剑指Offer之 - 调整数组顺序使奇数位于偶数前面

来源:互联网 发布:舞蹈教学软件 编辑:程序博客网 时间:2024/05/22 03:28

题目:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

思路:

两个指针,一个指向开头,一个指向末尾。

代码:

#include<iostream>using namespace std;//功能:把数组里的奇数放在前面,偶数放在后面//解法1:两个指针,一个在前一个在后void ReorderOddEven(int *pData , unsigned int length){if(pData == NULL || length <= 0)return;for(int i = 0 , j = length - 1 ; i < j ; i++ , j--){while(i < j && (pData[i] & 1) ){i++;}while(i < j && (pData[j] & 1 == 0)){j--;}swap(pData[i] , pData[j]);}}//更加通用的解法typedef bool (*pFunc)(int);void ReorderOddEvenCom(int *pData , unsigned int length , pFunc func){if(pData == NULL || length <= 0)return;for(int i = 0 , j = length - 1 ; i < j ; i++ , j--){while(i < j && !func(pData[i])){i++;}while(i < j && func(pData[j])){j--;}swap(pData[i] , pData[j]);}}bool isEven(int n){return (n & 1) == 0;}int main(){int num[8] = {2,4,6,8,1,3,5,7};ReorderOddEvenCom(num , 8 , isEven);for(int i = 0 ; i < 8 ; i++){cout<<num[i]<<' ';}cout<<endl;}


0 0
原创粉丝点击