/*****************************************************
题目:输入一个整数数组,实现一个函数来调整该数组中数字
的顺序,使得所有奇数位于数组的前半部分,所以偶数位于数
组的后半部分。
*****************************************************/
#include<stdio.h>
void reOrder(int* data, int length)
{
if(data == NULL || length <= 0)
return;
int* pBegin = data;
int* pEnd = data + length -1;
<span style="white-space:pre"> </span>//设置两个指针,当第一个指针指向奇数,第二个指向偶数,交换数字
while(pBegin < pEnd){
while(((*pBegin) & 1) && pBegin<pEnd)
++pBegin;
while(!((*pEnd) & 1) && pBegin<pEnd)
--pEnd;
if(pBegin < pEnd)
{
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
}
void printfArray(int* data,int length)
{
for(int i=0; i<length; ++i)
{
printf("%d\t", data[i]);
}
printf("\n");
}
int main()
{
const int length = 10;
int data[10] = {1,2,3,4,5,6,7,8,9,10};
printfArray(data, length);
reOrder(data, length);
printfArray(data, length);
return 0;
}
方法:不利用指针,利用数组索引
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void ReorderOddEven_1(int* arr, int len)
{
if(arr == NULL || len <=0)
return;
int index1 = 0;
int index2 = len-1;
while(index2 > index1)
{
while(index2 > index1 && (arr[index1] & 0x1) != 0)
index1++;
while(index2 > index1 && (arr[index2] & 0x1) == 0)
index2--;
swap(&arr[index1], &arr[index2]);
index1++;
index2--;
}
}