国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C/C++ 整數(shù)二分以及浮點(diǎn)數(shù)二分

這篇具有很好參考價(jià)值的文章主要介紹了C/C++ 整數(shù)二分以及浮點(diǎn)數(shù)二分。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

個(gè)人主頁(yè):仍有未知等待探索_C語(yǔ)言疑難,數(shù)據(jù)結(jié)構(gòu),小項(xiàng)目-CSDN博客

專題分欄:算法_仍有未知等待探索的博客-CSDN博客

目錄

一、引言

二、整數(shù)二分(二分查找)

1、步驟:

2、示例

【問(wèn)題一】求第一個(gè)大于3的數(shù)的位置?

【問(wèn)題二】求第一個(gè)大于等于3的數(shù)的位置?

【問(wèn)題三】求最后一個(gè)小于等于3的數(shù)的位置?

【問(wèn)題四】求最后一個(gè)小于3的位置?

三、浮點(diǎn)數(shù)二分?


一、引言

二分說(shuō)簡(jiǎn)單也簡(jiǎn)單,說(shuō)難也難。簡(jiǎn)單在于思想非常的簡(jiǎn)單,難就難在邊界值的確定上。下面我將進(jìn)行解釋。二分的前提是數(shù)組是有序的,這個(gè)大家應(yīng)該都知道哈。

二、整數(shù)二分(二分查找)

1、步驟:

  1. 先找到數(shù)組的左邊界 l 和右邊界? r。
  2. 然后確定要查找的數(shù)x 和中間點(diǎn) mid。
  3. if(mid <?x)證明 x 在 mid 的右邊,反之在其左邊。
  4. 然后進(jìn)行循環(huán),直到 l >?r的時(shí)候停止循環(huán)。

2、示例

對(duì)于給定一個(gè)數(shù)組【1,2,3,3,7,7,7,8,9】

【問(wèn)題一】求第一個(gè)大于3的數(shù)的位置?

【問(wèn)題二】求第一個(gè)大于3的數(shù)的位置?

【問(wèn)題三】求最后一個(gè)小于等于3的數(shù)的位置?

【問(wèn)題四】求最后一個(gè)小于3的位置?

其實(shí)這些問(wèn)題大差不差,主要是注意一下查找數(shù) x 和 中間數(shù) mid 的關(guān)系

【問(wèn)題一】求第一個(gè)大于3的數(shù)的位置?

#include<stdio.h>
int q[] = { 1,2,3,3,7,7,7,8,9 }, k = 3;//k為查找的數(shù)
int Binary_search(int q[], int l, int r) {
	int i = l - 1, j = r + 1, mid;
	while (i+1 != j) 
	{
		mid = (i + j) >> 1;
		//分界點(diǎn)是小于等于k的在左邊,大于k的在右邊,所以直接返回 j 就是答案
		if (q[mid] <= k)
		{
			i = mid;
		}
		else
		{
			j = mid;
		}
	}
	return j;
}
int main() {
	
	int len = sizeof(q) / sizeof(q[0]);
	int res = Binary_search(q, 0, len - 1);

	printf("%d", res);
	return 0;
}

【問(wèn)題二】求第一個(gè)大于等于3的數(shù)的位置?

#include<stdio.h>
int q[] = { 1,2,3,3,7,7,7,8,9 }, k = 3;//k為查找的數(shù)
int Binary_search(int q[], int l, int r) {
	int i = l - 1, j = r + 1, mid;
	while (i+1 != j) 
	{
		mid = (i + j) >> 1;
		
		if (q[mid] < k)
		{
			i = mid;
		}
		else
		{
			j = mid;
		}
	}
	return j;
}
int main() {
	
	int len = sizeof(q) / sizeof(q[0]);
	int res = Binary_search(q, 0, len - 1);

	printf("%d", res);
	return 0;
}

【問(wèn)題三】求最后一個(gè)小于等于3的數(shù)的位置?

#include<stdio.h>
int q[] = { 1,2,3,3,7,7,7,8,9 }, k = 3;//k為查找的數(shù)
int Binary_search(int q[], int l, int r) {
	int i = l - 1, j = r + 1, mid;
	while (i+1 != j) 
	{
		mid = (i + j) >> 1;
		
		if (q[mid] <= k)
		{
			i = mid;
		}
		else
		{
			j = mid;
		}
	}
	return i;
}
int main() {
	
	int len = sizeof(q) / sizeof(q[0]);
	int res = Binary_search(q, 0, len - 1);

	printf("%d", res);
	return 0;
}

【問(wèn)題四】求最后一個(gè)小于3的位置?

#include<stdio.h>
int q[] = { 1,2,3,3,7,7,7,8,9 }, k = 3;//k為查找的數(shù)
int Binary_search(int q[], int l, int r) {
	int i = l - 1, j = r + 1, mid;
	while (i+1 != j) 
	{
		mid = (i + j) >> 1;
		
		if (q[mid] < k)
		{
			i = mid;
		}
		else
		{
			j = mid;
		}
	}
	return i;
}
int main() {
	
	int len = sizeof(q) / sizeof(q[0]);
	int res = Binary_search(q, 0, len - 1);

	printf("%d", res);
	return 0;
}

三、浮點(diǎn)數(shù)二分?

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-754955.html

#include<iostream>
using namespace std;
#include<cstdio>
#include<algorithm>
double x;

double max(double x, double y)
{
	return x > y ? x : y;
}

double fBi_search(double l, double r) 
{
	double mid;
	while (r - l > 1e-8) 
	{
		mid = (l + r) / 2;
		if (mid * mid <= x)
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	return l;
}
int main() 
{
	//求根號(hào)x
	cin >> x;
	cout<<fBi_search(0, max(1, x));
	return 0;
}

到了這里,關(guān)于C/C++ 整數(shù)二分以及浮點(diǎn)數(shù)二分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包