您的位置:首页 > 其它

调整数组使奇数全部都位于偶数前面

2015-11-17 23:56 253 查看
调整数组使奇数全部都位于偶数前面。题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。方法一:从两边往中间进行判断,通过模除运算(num%2是否为0)寻找奇偶数,然后互换。
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

void adjust(int *arr,int len)
{
assert(arr);
int *p1 = arr;
int *p2 = arr + len - 1;
if (p1 == NULL || len == 0)//如果该整型数组为空,进行空操作
{
return;
}
while (p1 < p2)
{//从两边往中间进行判断奇偶
if((p1 < p2) && (*p2 % 2 == 0))//从后往前找奇数
p2--;
if((p1 < p2) && (*p1 % 2 != 0))//从前往后找偶数
p1++;
if (p1 < p2)//将两个数(奇数放在前面,偶数放在后面)交换
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}

}
}

int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i,len = sizeof(arr) / sizeof(arr[0]);
adjust(arr,len);
for (i = 0; i < len;i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
方法二:从两边往中间进行判断,通过num&1寻找奇偶数,然后互换。如果num&1==1,则num为奇函数;如果num&1==0,则num为偶函数。
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

void adjust(int *arr, int len)
{
assert(arr);
int *start = arr;
int *end = arr + len - 1;
if (start == NULL || len == 0)//如果该整型数组为空,进行空操作
{
return;
}
while (start < end)
{
while ((*start & 1) == 1)//*arr&1==1时*arr为奇数,
{
start++;
}
while ((*end & 1) == 0)//*arr&1==0时*arr为偶数
{
end--;
}
if (start < end)//将两个数(奇数放在前面,偶数放在后面)交换
{
int temp = *start;
*start++ = *end;
*end-- = temp;
}
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int len = sizeof(arr) / sizeof(arr[0]);
adjust(arr, len);
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组 调整位置