调整数组使奇数全部都位于偶数前面
题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分
设计思路:
一:前奇后奇
让这个数组前半部分往右移动一位,即left++,后半部分不动。
二:前奇后偶
这个数组前半部分右移一位,即left++。后半部分左移一位right–;
三:前偶后奇
让前半部分的这个元素跟后半部分的这个元素互换位置,然后左边右移一位,右边左移一位。
四:前偶后偶
前半部分不动,后半部分左移一位。
#include<stdio.h>
#include<stdlib.h>
void Adjust_array(int* arr, int sz) {
int left = 0;
int right = sz - 1;
for (int i = 0; i < sz; i++) {
if (arr[left] % 2 == 1 && arr[right] % 2 == 1) {
left++;
}
if (arr[left] % 2 == 1 && arr[right] % 2 == 0) {
left++;
right--;
}
if (arr[left] % 2 == 0 && arr[right] % 2 == 1) {
int tmp = arr[right];
arr[right] = arr[left];
arr[left] = tmp;
right--;
left++;
}
if (arr[left] % 2 == 0 && arr[right] % 2 == 0) {
right--;
}
}
}
void Print(int* arr, int sz) {
for (int i = sz - 1; i >= 0; i--) {
printf("%4d", arr[i]);
}
printf("\n");
}
int main() {
// 1、首先先定义一个整数数组。
int arr[] = { 1,5,4,6,3,2,8,7,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
Adjust_array(arr, sz);
Print(arr, sz);
system("pause");
return 0;
}