概述
一个整形数组,把奇数排列在前,偶数排列在后,例如 arr[]={1,2,3,4,5,6},排列后arr={1,3,5,2,4,6}.
方法一,定义两个指针p1,p2.p1指向数组的首地址,p2指向数组的最后一位数字的地址。如果p1指向的内容不是偶数,把p1加一,如果p2指向的内容不是奇数,把p2加一 ,如果p1指向了偶数并且p2指向了奇数,把p1和p2所指向的内容交换,直到P1大于p2.
代码如下
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[] = { 1,2,3,4,6,5,1,1};
int len = sizeof(a) / sizeof(a[0]);
int *p1 = a;
int *p2 = &a[len - 1];
int tmp = 0;
while (p1 < p2)
{
while (p1<p2)
{
if (*p1 % 2 == 0)
break;
p1++;
}
while(p1<p2)
{
if (*p2 % 2 == 1)
break;
p2--;
}
tmp = *p2;
*p2 = *p1;
*p1 = tmp;
}
for(int i = 0;i<len;i++)
printf("%d", a[i]);
system("pause");
return 0;
}
方法二,另外定义两个数组,一个数组存取数组arr中的奇数,另一个数组存取数组arr中的偶数。然后分别输出两个数组。
代码如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[] = { 1,2,3,4,5,6 ,6,6,6};
int len = sizeof(arr) / sizeof(arr[0]);
int odd[9] = { 0 };
int even[9] = { 0 };
int count_odd = 0;
int count_even = 0;
for (int i = 0; i < len; i++)
{
if (arr[i] % 2 == 1)
{
odd[count_odd++] = arr[i];
}
else
even[count_even++] = arr[i];
}
for (int i = 0; i < count_odd; i++)
printf("%d", odd[i]);
for (int i = 0; i < count_even; i++)
printf("%d", even[i]);
system("pause");
return 0;
}
最后
以上就是灵巧保温杯为你收集整理的将一个整形数组奇数排列在前偶数排列在后的全部内容,希望文章能够帮你解决将一个整形数组奇数排列在前偶数排列在后所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复