编程实现数组奇数位于前半部分,偶数位于后半部分。
程序员文章站
2022-05-12 12:31:48
...
题目
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
分析
所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分,因此我们要定义两个指针,第一个指针指向数组的第一个元素,第二个指针指向数组的最后一个元素,一个向后移动,一个向前移动,如果,第一个指向的是偶数,第二个指针指向的是奇数,我们就交换这两个数。
代码如下
#include<stdio.h>
#include<stdlib.h>
#define N 10
int change(int *arr,int p,int q) //交换奇数偶数
{
int tmp = arr[p];
arr[p]=arr[q];
arr[q]=tmp;
}
int odd_even(int *arr,int len)
{
int i = 0;
int j = len-1;
while(i<j)
{
while(i<j && arr[i]%2) //如果为奇数指针向后移动
{
i++;
}
while(i<j && !(arr[j]%2))//如果为偶数指针向前移动
{
j--;
}
if(i<j) //如果第一个指针指向的是偶数,第二个指向偶数,交换。
{
change(arr,i,j);
}
}
}
int main()
{
int arr[N]={1,3,4,5,6,8,9,2};
int i = 0;
printf("请输入一组数:\n");
for(i = 0;i<N;i++)
{
scanf("%d",&arr[i]);//输入一组数
}
odd_even(arr,N);
for(i = 0;i<N;i++)
{
printf("%d ",arr[i]);//打印交换后的数组
}
printf("\n");
system("pause");
return 0;
}
运行结果