调整数组使奇数全部都位于偶数前面。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include<stdio.h>
#include<stdlib.h>
void jiaohuan(int arr[],int i,int j)//交换奇数偶数
{
int tmp = 0;
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void odd_before(int arr[],int sz)
{
int left = 0;
int right = sz-1;//left指向第一个数,right指向最后一个数
while(left<right)
{
while((left<right)&&(arr[left]&0x01))
{
left++;
}//如果下标为left的数为奇数,left向后查找
while((left<right)&&(!(arr[right]&0x01)))
{
right--;
}//如果下标为right的数为偶数,right向前查找
jiaohuan(arr,left,right);
//交换left指向偶数,right指向奇数时的两个数
}
}
int main()
{
int arr[] = {1,2,3,4,5,6,7};
int sz = sizeof(arr)/sizeof(arr[0]);//计算数组长度
int i = 0;
odd_before(arr,sz);
for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
system("pause");
return 0;
}
实现结果: