数组3——将奇数移动到偶数的左边

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36669549/article/details/84929048

将数组c[1:n]中的所有奇数移动到偶数之前,要求时间复杂度为O(n)。

【分析】
这是西北大学考研试题。设置两个指示器i和j,分别从第一个元素向右从最后一个元素开始向左扫描,i遇到奇数略过,遇到偶数暂停,j遇到偶数略过,遇到奇数暂停,如果i<j,则交换i和j指向的元素,直到i≥j将结束,这样左边的元素就为奇数,右边的元素就为偶数。

main.cpp

#include <iostream>
using namespace std;
#include <iomanip>

#define MAX 100

void SplitArray(int c[],int n);
void PrintArray(int a[],int n);

void main()
{
	int n;
	int c[] = {29,54,68,32,49,21,396,207,181};
	n = sizeof(c)/sizeof(c[0]);
	cout << "数组c中的元素:" << endl;

	PrintArray(c, n);
	cout << "数组c调整后(左边元素为奇数,右边元素为偶数):" << endl;

	SplitArray(c, n);

	PrintArray(c, n);

	system("pause");
}

void SplitArray(int c[], int n)
{
	int i, j, t;
	i = 0, j = n - 1;
	while (i<j)
	{
		while (c[i]%2!=0)
		{
			i++;
		}

		while (c[j]%2==0)
		{
			j--;
		}

		if (i<j)
		{
			t = c[i];
			c[i] = c[j];
			c[j] = t;
		}
	}
}

void PrintArray(int a[], int n)
{
	int i;
	for (i = 0; i < n;i++)
	{
		cout << setw(4) << a[i];
	}

	cout << endl;
}

结果:

猜你喜欢

转载自blog.csdn.net/baidu_36669549/article/details/84929048
今日推荐