要求:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
实现:我们可以从数组的两边找起,最左边和最右边可以有四种情况
1.左边是奇数,右边是偶数(不用调整)
2.左边是奇数,右边是偶数(左边的不用调整,继续往后找,右边的不动)
3.左边是偶数,右边是偶数(右边的不用调整,继续往前找,左边的不动)
4.左边是偶数,右边是奇数(左右两个数互换)
一.输入数组,并找到最左右元素的下标
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0])-1;
二.排序过程
void sort(int arr[], int left, int right)
{
while (left < right)
{
if (arr[left] % 2 == 1 && arr[right] % 2 == 0)//左边是奇数,右边是偶数
{
left++;
right--;
}
else if (arr[left] % 2 == 1 && arr[right] % 2 == 1)//左边是奇数,右边是奇数
{
left++;
}
else if (arr[left] % 2 == 0 && arr[right] % 2 == 0)//左边是偶数,右边是偶数
{
right--;
}
else if (arr[left] % 2 == 0 && arr[right] % 2 == 1)//左边是偶数,右边是奇数
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
三.输出数组
int i = 0;
for (i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
{
printf("%d ", arr[i]);
}
四.整体代码
#include<stdio.h>
void sort(int arr[], int left, int right)
{
while (left < right)
{
if (arr[left] % 2 == 1 && arr[right] % 2 == 0)//左边是奇数,右边是偶数
{
left++;
right--;
}
else if (arr[left] % 2 == 1 && arr[right] % 2 == 1)//左边是奇数,右边是奇数
{
left++;
}
else if (arr[left] % 2 == 0 && arr[right] % 2 == 0)//左边是偶数,右边是偶数
{
right--;
}
else if (arr[left] % 2 == 0 && arr[right] % 2 == 1)//左边是偶数,右边是奇数
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0])-1;
sort(arr, left, right);
int i = 0;
for (i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
{
printf("%d ", arr[i]);
}
}