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

算法描述:

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

算法实现:

/*************************************************************************
	> File Name: main.c
	> Author: cyf
	> Mail: XXX@qq.com
	> Created Time: 2016年05月20日 星期五 09时08分22秒
 ************************************************************************/

#include 
#include 
#include 
#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 
#include 

/*
 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得
 * 所有奇数位于数组的前半部分,所有偶数位于数组后半部分
 * */
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)




你可能感兴趣的:(数据结构与算法)