找到一个乱序数组排序后某一特定数值首次和末次出现的位置

不多说,上代码,我的思路是利用快速排序,进行数组排序,而后利用二分查找方法,进行快速定位

int intArray[]={12,451,0,5,45,15,78,23,54,76,451};
void QuickSort(int* a,int low,int high)
{
	if(NULL==a)
	{
		return;
	}
	if(low>=high)
	{
		return ;
	}
	int first=low,last=high;
	int key=a[low];
	while(first<last)
	{
		while(first<last&&key<=a[last])
		{
			last--;
		}
		a[first]=a[last];
		while(first<last&&key>=a[first])
		{
			first++;
		}
		a[last]=a[first];
	}
	a[first]=key;
	QuickSort(a,low,first-1);
	QuickSort(a,first+1,high);
}
int getFirstPos(int*a,int value,int length)
{
         if(NULL==a) return;
        int low=0,high=length-1;
	int mid=(low+high)/2;
	int nPos=-1;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(value<a[mid])
		{
			high=mid-1;
		}
		else if(value==a[mid])
		{
			nPos=mid;
			high=mid-1;
		}
		else
		{
			low=mid+1;
		}
	}
	return nPos;
}

int getLastPos(int*a,int value,int length)
{
        if(NULL==a) return;
        int low=0,high=length-1;
	int mid=(low+high)/2;
	int nPos=-1;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(value<a[mid])
		{
			high=mid-1;
		}
		else if(value==a[mid])
		{
			nPos=mid;
			low=mid+1;
		}
		else
		{
			low=mid+1;
		}
	}
	return nPos;
}
int main()
{
	QuickSort(intArray,0,10);
	cout<<451<<"第一次出现的位置是:"<<getFirstPos(intArray,451,11)<<endl;
	cout<<451<<"最后一次出现的位置是:"<<getLastPos(intArray,451,11)<<endl;
}

经测试结果正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值