题目要求:
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
分析:
要使一组整形数组中所有奇数位于数组的前半部分,则要使数组前面的偶数与数组后面的偶数互换位置。
则首先要找到数组前面的第一个偶数,代码实现如下:
while((*start&1) == 1)
{
start++;
}
也要找到字母从后到前的第一个奇数,代码实现如下:
while((*end&1) == 0)
{
end--;
}
找到这两个数然后将这两个数互换位置,代码实现如下:
if(start<end)
{
int tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
然后以上这三个代码应该是一个循环,代码实现如下:
while(start<end)
{
//判断第一个数是否为奇数,如果为奇数则不动,start+1;
while((*start&1) == 1)
{
start++;
}
//判断最后一个数是否为偶数,如果为偶数则不动,end-1;
while((*end&1) == 0)
{
end--;
}
//如果start<end时,则交换两个数。
if(start<end)
{
int tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
}
全部代码实现如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
//打印数组;
void print(int* arr, int len)
{
int i = 0;
for(i=0; i<len; i++)
{
printf("%d ",arr[i]);
}
putchar('\n');
}
void reverse(int* arr, int len)
{
int* start = arr;
int* end = arr+len-1;
while(start<end)
{
//判断第一个数是否为奇数,如果为奇数则不动,start+1;
while((*start&1) == 1)
{
start++;
}
//判断最后一个数是否为偶数,如果为偶数则不动,end-1;
while((*end&1) == 0)
{
end--;
}
//如果start<end时,则交换两个数。
if(start<end)
{
int tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
}
}
int main()
{
int arr[] = {1, 2, 3, 5, 6, 7, 8, 9};
//计算整形数组的长度;
int len = sizeof(arr)/sizeof(arr[0]);
//打印原始数组;
print(arr, len);
reverse(arr, len);
//打印转换后的数组;
print(arr, len);
system("pause");
return 0;
}
展示结果如下: