调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
【解题思路】将数组分为两部分,前半部分存储奇数,后半部分存储偶数,定义 i 和 j两个下标,i 指向数组首地址,j 指向数组末地址,遍历数组前半部分,若是偶数,暂停,等待交换数字。否则,继续遍历。数组后半部分同理。
#include<stdio.h>
#include<stdlib.h>
void sort(int *arr, int len)
{
int i = 0;
int j = len - 1;
while (i < j)
{
if (arr[i]%2==0)//偶数时等待交换
{
arr[i] = arr[i];
}
else
{
++i;
}
if (arr[j] % 2 == 1)//奇数时等待交换
{
arr[j] = arr[j];
}
else
{
--j;
}
if (i < j)//交换数字
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int len = sizeof(arr) / sizeof(arr[0]);//求取数组数字个数,sizeof(数组名)指整个数组,sizeof(arr[0])数组首地址。
int i = 0;
sort(arr, len);
for (i = 0; i < len; i++)//打印交换后的数组
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}