2.19 区间重合判断

#include <stdio.h>
#define  N   6 
int sort(int x[], int y[], int b, int e)
{
	int tmpx,tmpy,i,j,m;
	i=b;
	j=e;
	tmpx=x[i];
	tmpy=y[i];
	while(i<j)
	{
		while(x[j]>=tmpx&&i<j) j--;
		x[i]=x[j];
		y[i]=y[j];
		while(x[i]<=tmpx&&i<j) i++;
		x[j]=x[i];
		y[j]=y[i];
	}
	x[i]=tmpx;
	y[i]=tmpy;
	return i;
}
void quicksort(int x[], int y[], int b, int e)
{	
	int i,j,m;
	i=b;j=e;
	if(i<j)
	{
		m=sort(x,y,i,j);
		quicksort(x,y,i,m-1);
		quicksort(x,y,m+1,j);
	}
}
int merge(int x[], int y[],int n)
{
	int cur=0,next=1;
	while(next<n)
	{
		if(y[cur]>=x[next])
		{
			if(y[cur]<=y[next])
				y[cur]=y[next];
			next++;
		}
		else
		{
			x[cur+1]=x[next];
			y[cur+1]=y[next];
			next++;
			cur++;
		}
	}
	++cur;
	x[cur]='\0';
	y[cur]='\0';
	return cur;
}
int find(int x[], int y[],int n, int X,int Y)
{
	int low=0,high=n-1,m;
	while(low<=high)
	{
		m=(high+low)/2;
		if(X<x[m])
		{
			high=m-1;
		}
		else if(X>=x[m])
		{
			if(Y<=y[m]) return m;
			else low=m+1;
		}
	}
	return -1;
}
void pri(int x[],int y[],int len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		if(i == 5)
		{
			printf("\n");
		}
		printf("[%d,%d] ", x[i], y[i]);
	}
	printf("\n");
}
int main()
{
	int  x[N] = {99,7,2,143,1,8};
	int  y[N] = {200,20,3,188,3,15};
	int len;
	int flag;
	printf("The Object Regions Are:\n");
	pri(x,y,N);

	quicksort(x,y,0,5);
	printf("After sort array Are:\n");
	pri(x,y,N);

	len=merge(x,y,N);
	printf("After merge len is:%d\n",len);
	pri(x,y,len);

	flag=find(x,y,len,100,150);
	printf("flag is:%d\n",flag);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值