將一個整形陣列奇數排列在前偶數排列在後
阿新 • • 發佈:2019-01-25
一個整形陣列,把奇數排列在前,偶數排列在後,例如 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;
}