折半查找以及插入


//折半查找
int half_find(int* p, //數組
			  int n, //長度
			  int d)//數據
{
	int b = 0, e = n - 1;
	while (b <= e)
	{
		int h = (b + e) / 2;
		if (d < p[h])
			e = h - 1;
		else if (d > p[h])
			b = h + 1;
		else 
			return h;
	}
	return -1;
}

//折半插入
bool half_insert(int* p, //數組
				 int n, //長度
				 int d)//數據
{
	int b = 0, e = n - 1;
	while (b <= e)
	{
		int h = (b + e) / 2;
		if (d < p[h])
			e = h - 1;
		else if (d > p[h])
			b = h + 1;
		else 
			return false;
	}

	if (b >= e)
	{
		//當折半查找跳出的時候,begin位置就應該
		//是插入新數據的位置

		//得到當前應該移動的次數
		int m = n - b;
		for (int i = 0; i < m; ++i)
			p[n - i] = p[n - 1 - i];
		p[b] = d;
	}
	return true;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: