本人学习C语言几个月以来的第一次自主研发,此文仅记录次过程
题目具体要求如下;
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
#include<stdio.h>
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 角标+1
odd[o] = *(p + i);
o++;
g++;
}
}
//再在奇数数组的基础上,统计偶数
for (int i = 0; i < sz; i++)
{
//判断奇偶
if (*(pp + i) % 2 == 0) {
//奇数-> 存入odd数组,其指针+1 角标+1
odd[o] = *(pp + i);
o++;
g++;
}
else {
;
}
}
//返回odd原始地址
return s;
}