调整数组使奇数全部都位于偶数前面
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
1.输入数组 2.调整数组 3.输出数组
1.输入数组
//输入 int arr[10] = {0}; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for(i = 0; i < sz; i++) { scanf("%d", &arr[i]); }
2.调整数组
void move_num(int arr[], int sz) { int left = 0; int right = sz - 1; while (left < right) { //从左往右找偶数,找到停下来 while ((left < right) && (arr[left] % 2 == 1)) { left++; } //从右往左找奇数,找到停下来 while ((left < right) && (arr[right] % 2 == 0)) { right--; } //交换奇偶数 if (left < right) { int tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } }
可能存在数组全是奇数的情况,为避免越界访问,循环条件必须加上
left<right
3.输出数组
//输出 for (i = 0; i < sz; i++) { printf("%d ", arr[i]); }
完整代码如下
#include<stdio.h> void move_num(int arr[], int sz) { int left = 0; int right = sz - 1; while (left < right) { //从左往右找偶数,找到停下来 while ((left < right) && (arr[left] % 2 == 1)) { left++; } //从右往左找奇数,找到停下来 while ((left < right) && (arr[right] % 2 == 0)) { right--; } //交换奇偶数 if (left < right) { int tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } } int main() { //输入 int arr[10] = {0}; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for(i = 0; i < sz; i++) { scanf("%d", &arr[i]); } //调整 move_num(arr, sz); //输出 for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }