题目:
输入一个整数数组,实现一个函数。
用来调整该数组中数字的顺序,
使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:
1.设置两个指针变量:*left和*right,*left表示数组首元素的地址,*right表示数组末元素的地址。
2.设置[left,right]区间循环来进行元素置换操作。
3.设置一个Swap()函数,起到前后交换的作用。
4.如果在left<right的条件范围内,left往从前往后找,直到找到一个奇数为止。
5.如果在left<right的条件范围内,right从后往前找,直到找到一个偶数为止。
6.如果left和right都找到了对应的数据,则交换,然后继续判断。
#include<stdio.h>
void Swap(int arr[],int rs) //设置Swap函数,最后对前后奇偶进行位置置换
{
int sum = 0;
int* left = arr; //数组名就是首元素的地址,相当于*(arr+i),此时i = 0
int* right = arr + rs - 1; //相当于*(arr+rs-1),首元素地址加数组长度减一等于末元素地址
while (left < right) //循环条件
{
while ((left < right) && (*left % 2 != 0))
{
left++;
}
while ((left < right) && (*right % 2 == 0))
{
right--;
}
if (left < right)
{
sum = *left;
*left = *right; //交换数据元素
*right = sum;
}
}
}
void Print(int arr[],int rs)
{
for (int i = 0; i < rs; i++)
{
printf("%d ",arr[i]);
}
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12};
int rs = sizeof(arr) / sizeof(arr[0]);
Swap(arr, rs);
Print(arr,rs);
return 0;
}
----------------------------------------------------------------------
-------------------------------------------------
---------------------------
------------------
----------
感谢老铁支持!!!
--------------------
-----------------------------------
---------------------------------------------------------------
------------------------------------------