調整數組順序使奇數位於偶數前面

題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分

分析如下圖:



代碼如下:

#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;
}

結果如下圖:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章