调整数组顺序,使得奇数总位于偶数前面
2015-08-25 16:17
357 查看
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。#include <iostream> using namespace std; void ReOrderArray(int* arr, int length, bool (*func)(int)) { if(arr == NULL || length <=0) return; int* pBegin = arr; int* pEnd = arr + length - 1; int temp; while(pBegin < pEnd) { while (pBegin < pEnd && !func(*pBegin)) pBegin++; while (pBegin < pEnd && func(*pEnd)) pEnd--; if(pBegin < pEnd) { temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; } } } bool isEven(int n) { if((n & 1) == 0) return true; else return false; } void ReorderOddEven(int* arr, int length) { ReOrderArray(arr, length, isEven); }
// ====================测试代码==================== void PrintArray(int numbers[], int length) { if(length < 0) return; for(int i = 0; i < length; ++i) printf("%d\t", numbers[i]); printf("\n"); } void Test(char* testName, int numbers[], int length) { if(testName != NULL) printf("%s begins:\n", testName); int* copy = new int[length]; for(int i = 0; i < length; ++i) { copy[i] = numbers[i]; } printf("Test for solution 1:\n"); PrintArray(numbers, length); ReorderOddEven(numbers, length); PrintArray(numbers, length); delete[] copy; } void Test1() { int numbers[] = {1, 2, 3, 4, 5, 6, 7}; Test("Test1", numbers, sizeof(numbers)/sizeof(int)); } void Test2() { int numbers[] = {2, 4, 6, 1, 3, 5, 7}; Test("Test2", numbers, sizeof(numbers)/sizeof(int)); } void Test3() { int numbers[] = {1, 3, 5, 7, 2, 4, 6}; Test("Test3", numbers, sizeof(numbers)/sizeof(int)); } void Test4() { int numbers[] = {1}; Test("Test4", numbers, sizeof(numbers)/sizeof(int)); } void Test5() { int numbers[] = {2}; Test("Test5", numbers, sizeof(numbers)/sizeof(int)); } void Test6() { Test("Test6", NULL, 0); } int main(int argc, char* argv[]) { Test1(); Test2(); Test3(); Test4(); Test5(); Test6(); return 0; }
相关文章推荐
- HDU 3853 LOOPS (概率DP)
- Android:ListView控件补充例子
- 百度面试题 运用递归求最大重复数
- mysql-proxy读写分离
- Android—ViewPager: Can't Change Tag of Fragment
- 在美国折腾护照的一星期
- 设计模式笔记(六)--适配器模式、外观模式
- 《算法导论》中的计数排序的C++实现
- 中介者——对象行为模式
- 【LeetCode】(12)Integer to Roman(Medium)
- Spark之scala
- NSDate
- MS-SQL 删除数据库所有的表
- 解决Gradle DSL method not found: ‘android()’
- IP地址分类,内网和外网的区别
- Winform消除button按下出现的虚线简单实现方法
- DIV背景透明样式使用
- install redis and used in golang on ubuntu 14.04
- 编程软件字体推荐(一)
- 第三性的秘密世界