关于 (基础)荷兰国旗 问题的 C语言实现----》引出后续 快速排序 问题

本文探讨了一种不使用额外数组的解决方案来处理荷兰国旗问题,即在原数组中将小于、等于和大于指定数值的元素分别排列到左侧、中间和右侧。通过示例代码展示了如何通过交换元素实现这一目标。对于更复杂的情况,即将等于指定数值的元素放在中间,文章提出了悬念,暗示将有后续内容揭示解决方法。
摘要由CSDN通过智能技术生成

荷兰国旗问题1.0

    题目描述:    给定一个 无序的数组 和 一个数num,要求最终该数组 左侧为<=num的数,右侧为>num的数,左右侧的数不用有序。

        当然了,该题有很多解法,但可能你第一时间想到的是再创建一个数组,分别在原数组中找出合适的数,然后依次放进去,那么如果不创建数组的话,该如何解决呢?

        以下为代码:

#include<stdio.h>
void Netherlandsflag(int arr[],int num,int L,int R);
void swap(int arr[],int index,int left);
int main()
{
	int arr[5]={1,3,4,2,5};
	int num=3;
	Netherlandsflag(arr,num,0,4);
//控制输出格式,使结果更加明了 
	int i,flag=0;
	for(i=0;i<=4;i++)
	{
		printf("%d ",arr[i]);
		if(arr[i+1]>num&&flag==0)
		{
			printf(") ");
			flag=1;
		}
	}
} 
void Netherlandsflag(int arr[],int num,int L,int R)
{
	int index=0;//index表示每次要比较的数 
	int leftborder=-1;//左组边界 
	while(index<=R)
	{
		if(arr[index]<=num)
		{
			swap(arr,index,leftborder+1);
			index++;
			leftborder++;
		}
		else
			index++;
	}
}
//数组元素交换 
void swap(int arr[],int index,int left)
{
	int temp;
	temp=arr[left];
	arr[left]=arr[index];
	arr[index]=temp;
 } 

                我们从-1处出发,始终用arr[index]去和num作比较,若前者小,则左边界-1向右拓展,同时index也向右拓展(考虑到arr[index]不始终为左组的下一个数,所以我们用arr[index]与左组的下一个数做交换后进行拓展);若后者小,则index向后走,左边界不变。最后直到index越界。

        好了,接下来大家想想如果 最终结果要求 左组<num 中间为 num 右组 >num。这该怎么办呢?   下期揭晓!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值