调整数组使奇数全部都位于偶数前面

xiaoxiao2021-02-28  37

题目:

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

#include<stdio.h> #include<assert.h> void set_procedure(int *p,int lens) { int *p1=p; int *p2=p+lens-1; assert(p1 != 0); assert(p2 != 0); while (p1 < p2) { while (p1 < p2 && (*p1 % 2) != 0)//向后移动p1,直到它指向偶数,要注意此处加上p1<p2为了防止越界访问 { p1++; } while (p1 < p2 && (*p2 % 2) == 0)//向前移动p2,直到它指向奇数 { p2--; } if (p1 < p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } } } int main() { int i = 0; int arr[] = { 1,2,3,4,5 }; int len = sizeof(arr) / sizeof(arr[0]); set_procedure(arr,len); for (i = 0; i < len; i++) { printf("%d\n", arr[i]); } return 0; }

难点:利用指针的不断移动遍历整个数组 同理:利用下标也可以遍历整个数组。

#include<stdio.h> void set_procedure(int a[], int lens) { int left = 0; int right = lens-1; int tmp = 0; while (left < right) { while ((left < right) && (a[left] % 2 == 1)) { left++;//向右寻找,直到找到偶数 } while ((left < right) && (a[right] % 2 == 0)) { right--;//向左寻找,直到找到奇数 } if (left < right) { tmp = a[left]; a[left] = a[right]; a[right] = tmp; left++; right--; } } } int main() { int i = 0; int arr[] = { 1,2,3,4,5 }; int len = sizeof(arr) / sizeof(arr[0]); set_procedure(arr, len); for (i = 0; i < len; i++) { printf("%d ", arr[i]); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2250295.html

最新回复(0)