为数组中奇数和偶数划分楚河汉界
本人学习C语言几个月以来的第一次自主研发,此文仅记录次过程
题目具体要求如下;
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
#include int* fun(int* arr, int sz);void main() {int* ret = NULL;int arr[5] = {7,8,2,1,5};int sz = sizeof(arr) / sizeof(arr[0]);ret = fun(arr,sz);for (int i = 0; i < sz; i++) {printf("%d ",*(ret+i));}}int* fun(const int* arr,int sz) {//原始数组地址int* p = arr;int* pp = arr;//int even[5] = { 0 };//偶数坐标计数//int e = 0;//偶数指针计数//int* j = even;int odd[5] = { 0 };//奇数坐标计数int o = 0;//奇数指针计数int* g = odd;//奇数初始地址int* s = odd;//偶数初始地址//int* t = even;此处不知为何,走到了之前学习的链表的误区当中,想要分为两个数组,再把数组进行拼接,奈何思忖些许还是感觉到了自己的天真,但没有摸出自己思考的痕迹,作为一种线索和思路供日后自省。//for (int i = 0; i < sz; i++)//{// //判断奇偶// if (*(p+i) % 2 == 0) {// //偶数-> 存入even数组,其指针+1 角标+1// even[e] = *(p+i);// e++;// j++;// }// else {// //奇数-> 存入odd数组,其指针+1 角标+1// odd[o]= *(p + i);// o++;// g++;// }//}因为无法对两个数组进行拼接,因此,选择先将arr数组中所有的奇数搞到odd数组中,在odd这个已有奇数的数组中,在遍历一次arr,将所有偶数提取出来,那么结果肯定是奇数在前,偶数在后,问题解决。//先把奇数统计出来for (int i = 0; i < sz; i++){//判断奇偶if (*(p + i) % 2 == 0) {;}else {//奇数-> 存入odd数组,其指针+1 角标+1odd[o] = *(p + i);o++;g++;}}//再在奇数数组的基础上,统计偶数for (int i = 0; i < sz; i++){//判断奇偶if (*(pp + i) % 2 == 0) {//奇数-> 存入odd数组,其指针+1 角标+1odd[o] = *(pp + i);o++;g++;}else {;}}//返回odd原始地址return s;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
