題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分
分析如下圖:
代碼如下:
#include<stdio.h>
void Swap(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void oddtoeven(int* arr, int len)
{
if (arr == NULL || len <= 0)
{
printf("arr is NULL\n");
}
int begin = 0, end = len - 1;
while (begin <= end)
{
//直到begin指向偶數
while (begin <= end && (arr[begin] % 2) == 1)
++begin;
//直到end指向奇數
while (begin <= end && (arr[end] % 2) == 0)
--end;
//交換倆個數後,begin與end都指向下一個值
Swap(&arr[begin++], &arr[end--]);
}
}
//打印數組
void Print(int* arr, int len)
{
if (arr == NULL || len <= 0)
{
printf("arr is NULL\n");
}
for (int i = 0; i < len; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//測試如下:
int main()
{
int arr[10] = { 25, 4, 7, 8, 10, 5, 3, 2, 9, 12 };
Print(arr, sizeof(arr) / sizeof(arr[0]));
oddtoeven(arr, sizeof(arr)/sizeof(arr[0]));
Print(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
結果如下圖: