【C語言】調整陣列使奇數全部都位於偶數前面。

Miss_Monster發表於2018-07-31

這道題目呢是這樣的:

輸入一個整數陣列,實現一個函式,來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。

首先定義一個函式,函式的功能就是將陣列的奇數全部放在前面,偶數全部放在後面。那麼要將奇數全部放在陣列前面,偶數全部放在陣列的後面,就肯定需要兩個指標,一個從左邊開始找偶數,一個從右邊開始找奇數,找到了就交換,直到所有的元素都被交換完畢。那麼我們怎麼實現這個功能呢?

定義一個 left 指標變數,從左邊開始走,一個一個判斷,是奇數就繼續向右,那麼直到找到偶數跳出while迴圈。

while (((left < right) && (*left) % 2 != 0))

           {

                 left++;

           }

同理,我們也可以定義一個 right 指標變數,來從右邊開始找奇數,找到就跳出 while 迴圈。

while (((left < right) && (*right) % 2 == 0))
		{
			right--;
		}

然後我們將找到的一組奇數偶數交換:

if (left < right)
		{
			int tmp=*left;
			*left = *right;
			*right = tmp;
		}

 然後交換一組之後,還有其他組,這又是一個 while 迴圈。所以整體程式碼如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>


void Movenum(int a[], int sz)
{
	int *left = a;
	int *right = a + sz - 1;

	while (left < right)
	{
		while (((left < right) && (*left) % 2 != 0))
		{
			left++;
		}
		while (((left < right) && (*right) % 2 == 0))
		{
			right--;
		}
		if (left < right)
		{
			int tmp=*left;
			*left = *right;
			*right = tmp;
		}
	}
}
int main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	int i = 0;
	int sz = (sizeof(a) / sizeof(a[0]));
	Movenum(a, sz);
	for (i = 0; i < sz; i++)
	{
		printf("%d\n", a[i]);
	}
	system("pause");
	return 0;
}


相關文章