输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得 所有奇数位于数组的前半部分,所有偶数位于数组后半部分
2016-05-24 09:23
751 查看
算法描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得 所有奇数位于数组的前半部分,所有偶数位于数组后半部分
算法实现:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得 所有奇数位于数组的前半部分,所有偶数位于数组后半部分
算法实现:
/************************************************************************* > File Name: main.c > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年05月20日 星期五 09时08分22秒 ************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "reOrderOddEven.h" void PrintArray(int numbers[], int length) { if(length < 0) return; int i = 0; for(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 = (int *)malloc(length*sizeof(int)); int i = 0; for(i = 0; i < length; ++i) { copy[i] = numbers[i]; } printf("Test start:\n"); PrintArray(numbers, length); reOrderOddEven(numbers, length); PrintArray(numbers, length); free(copy); } void Test1() { int numbers[] = {1, 2, 3, 4, 5, 6, 7}; Test("Test1", numbers, sizeof(numbers)/sizeof(int)); } int main() { Test1(); return 0; }
/************************************************************************* > File Name: reOrderOddEven.h > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年05月20日 星期五 08时59分33秒 ************************************************************************/ #ifndef _REORDERODDEVEN_H #define _REORDERODDEVEN_H #include <stdio.h> #include <stdlib.h> /* * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得 * 所有奇数位于数组的前半部分,所有偶数位于数组后半部分 * */ void reOrderOddEven(int *pData, unsigned int length); //void reOrderOddEven_2(int *pData, unsigned int length, int (*func)(int)); #endif
/************************************************************************* > File Name: reOrderOddEven.c > Author: cyf > Mail: XXX@qq.com > Created Time: 2016年05月20日 星期五 09时02分12秒 ************************************************************************/ #include "reOrderOddEven.h" int func(int n) { return (n&0x1)==0; } void reOrderOddEven(int *pData, unsigned int length) { if (pData == NULL || length == 0) { return ; } int *pStart = pData; int *pEnd = pData + length -1; while (pStart < pEnd) { while (pStart < pEnd && (*pStart&0x1)!=0) { pStart++; } while (pStart < pEnd && ((*pEnd&0x1)==0)) { pEnd--; } if (pStart < pEnd) { int tmp = *pStart; *pStart = *pEnd; *pEnd = tmp; } } } /* void reOrderOddEven_2(int *pData, int length, int (*func)(int)) { if (pData == NULL || length == 0) { return ; } int *pStart = pData; int *pEnd = pData + length -1; while (pStart < pEnd) { while (pStart < pEnd && !func(*pStart)) { pStart++; } while (pStart < pEnd && func(*pEnd)) { pEnd--; } if (pStart < pEnd) { int tmp = *pStart; *pStart = *pEnd; *pEnd = tmp; } } } */
.SUFFIXES:.c.o CC = gcc CFLAGS = -g -O2 -Wall SRCS = main.c\ reOrderOddEven.c OBJS = $(SRCS:.c=.o) EXES = main all:$(OBJS) $(CC) $(OBJS) -o $(EXES) $(CFLAGS) .c.o: $(CC) -o $@ -c $(CFLAGS) $< clean: rm -rf $(OBJS) $(EXES)
相关文章推荐
- 米勒罗宾素性测试(Miller–Rabin primality test)
- java设计模式学习-代理模式
- java入门教程-2.1Java数据类型以及变量的定义
- Java 8增强的包装类
- 使用ajaxupload.js插件上传图片不成功问题----RTFSC
- Z变换与系统函数
- Linux下yum命令详解
- swift笔记1
- OpenGLES---分离窗口和OpenGLES代码
- js time
- 安装和使用的django的debug_toolbar
- java入门教程-1.9Java import以及Java类的搜索路径
- docker的一些命令
- JAVA异常处理。
- android中的内部类
- cmd中执行netsh wlan start hostednetwork 无法启动承载网络。 组或资源的状态不是执行请求操作的正确状态。
- 让sql server 数据库的表id从1开始
- java入门教程-1.8Java类库及其组织结构(Java API)
- 实习入职第五天:位运算与移运算
- Oracle删除当前用户下所有的表的方法