题目描述:有一个整型数组,要求调整顺序,使得奇数全部位于偶数前面
实现上述要求,可以从左边向右找偶数,同时,从右边向左边找奇数,然后交换,这样,奇数被调整到了前面。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void move_arr(int* arr, int sz)
{
int left = 0;
int right = sz - 1;//left标记数组首元素,right标记数组最后一个元素
while(left<right){
while ((arr[left] % 2 == 1) && (left < right)) {//加left <right 目的是防止越界,比如全奇left可以持续++
left++;
}//是奇数就++找偶数
while ((arr[right] % 2 == 0) && (left < right)) {
right--;
}//是偶数就--找奇数
if (left < right) {
int tep = arr[left];
arr[left] = arr[right];
arr[right] = tep;
}//交换捏
}
}
void print_arr(int* a, int sz)
{
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ", a[i]);
}
}
int main(void)
{
int arr[] = { 1,2,4,3,6,5,7,8,2,1 };
int sz = sizeof(arr) / sizeof(*arr);//求数组长度
move_arr(arr, sz);//封装函数
print_arr(arr, sz);//打印函数
return 0;
}