C语言荷兰国旗

数组分割(荷兰国旗问题)

/*
数组分割(荷兰国旗问题)

环境:	vs2019

结果:	1 1 1 2 2 2 3 3 3(正确)

日期:	2020.3.26

编辑者:	梦如初秋
*/
#include<stdio.h>
#define n 9

int main()
{
	int a[n] = { 2,3,1,3,2,2,1,3,1 };
	//小于2的数排在左边,等于2的数排在中间,大于2的数排在右边
	int left = -1, right = n, cent = 0;
	int temp = 0;

	for (int i = 0;i < n;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	while (cent < right)//cent 大于 right 时循环结束,表示已经遍历
	{
		if (a[cent] == 2)//遇到2,则不操作
		{
			cent++;
		}
		else if (a[cent] < 2)//遇到 <2 的数,将下标cent的数于下标lift的数交换
		{
			temp = a[left + 1];
			a[left + 1] = a[cent];
			a[cent] = temp;
			left++;
			cent++;
		}
		else//遇到 >2 的数,将下标cent的数于下标right的数交换
		{
			temp = a[right - 1];
			a[right - 1] = a[cent];
			a[cent] = temp;
			//cent不变,因为换过来的数不确定大小,故与 <2 的情况不同,仍需要比较
			right--;
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}

	system("pause");
	return 0;
}

来自大一小白的编辑…

发布了1 篇原创文章 · 获赞 0 · 访问量 15
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览