調整陣列使奇數全部都位於偶數前面(C語言)
阿新 • • 發佈:2019-02-10
題目:
輸入一個整數陣列,實現一個函式,來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
思想:
前後兩個指標,Start指標指向陣列第一個元素,End指標指向陣列最後一個元素,
Start指標從前往後找到第一個偶數停下,End指標從後往前找到第一個奇數停下,如果Start < End,就交換兩指標指向
程式碼實現:
void _swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void UnevenNumberInFront_EvenNumberInLast(int *array, int size)
{
int Start = 0;
int End = 0;
if (array == NULL || size <= 0)
{
return;
}
Start = 0;
End = size - 1;
while (Start < End)
{
while ((array[Start] % 2 != 0) && (Start < End))
{
Start++;
}
while ((array[End] % 2 == 0) && (Start < End))
{
End--;
}
_swap(&(array[Start]), &(array[End]));
}
}
測試:
void TestNumber()
{
int i = 0;
int array[] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 };
int size = sizeof(array) / sizeof(array[0]);
printf ("Before: ");
for (i = 0; i < size; i++)
{
printf("%d ", array[i]);
}
printf("\n");
UnevenNumberInFront_EvenNumberInLast(array, size);
printf("After: ");
for (i = 0; i < size; i++)
{
printf("%d ", array[i]);
}
printf("\n");
}
int main()
{
TestNumber();
system("pause");
return 0;
}
測試結果:
如有問題,歡迎探討,謝謝您!