1. 程式人生 > >將一個整形陣列奇數排列在前偶數排列在後

將一個整形陣列奇數排列在前偶數排列在後

一個整形陣列,把奇數排列在前,偶數排列在後,例如 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; }