题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
要求:时间复杂度为O(n)
答:
#include "stdafx.h" #include <iostream> using namespace std; bool IsOddNumber(int n) { return (n & 1) != 0; } void AdjustArray(int arr[], int length, bool (*Func)(int)) { int begin = 0; int end = length - 1; while (begin < end) { if (Func(arr[begin])) { begin++; continue; } if (!Func(arr[end])) { end--; continue; } int temp = arr[begin]; arr[begin] = arr[end]; arr[end] = temp; } } int _tmain(int argc, _TCHAR* argv[]) { int arr[] = {-1,-2,-3,4,5,6,7,8,9,10,11,12,13,14,15,-16,17,-18,-19}; AdjustArray(arr, sizeof(arr)/sizeof(arr[0]), IsOddNumber); for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) { cout<<arr[i]<<" "; } cout<<endl; return 0; }
运行界面如下: