您的位置:首页 > 其它

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

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: