您的位置:

二分图判定c语言,二分查找c语言代码

本文目录一览:

C语言 二分法查找次数公式怎么推导?

  对具有n个元素的有序数组进行二分法查找,要分析的比较次数,可以使用画二叉判定树的方法来分析。该二叉判定树的高度为[log2(n)]+1层,此即为二分查找的最多比较次数,比如:n=1000,则最多比较[log2(1000)]+1=9+1=10次。

  如果要计算平均的比较次数,则需要对二叉判定树中的每个节点进行分析,处于第一层的比较1次,第二层的比较2次,第三层比较3次,依次类推……把各个节点的比较次数累加,再处于节点数(元素个数)即为平均比较次数,这里假设查找是在等概率的情况下进行的。

  举个例子:有9个元素的有序数组,对每个元素按1,2,3...8,9进行编号,则其二叉判定树如下:

图中可以看出,如果要找的元素处在第5个位置,则只要1次比较即可找到,若找第9个元素,则需要4次比较,算法分别比较了第5,7,8,9等4个元素。所以,平均的比较次数大概如下:

这样分析,能看懂吗?希望能帮到你!

在C语言中什么是二分法

举个例子吧,有一组有序数字,要查找某一数字,判断中间数字是否符合条件,不符合再从中间分成两半,选择符合的一半,再判断再分,直到找到或者不能再分为止。

注意一定是有序的,不能用于无序的数据查找。这样每次都砍去一半,时间复杂度仅为lg(n),查找非常快。

C语言二分查找法

#include stdio.h

int binfind(int val[] , int num , int value)

{

int start = 0;

int end = num - 1;

int mid = (start + end)/2;

while(val[mid] != value start end)

{

if (val[mid] value)

{

end = mid - 1;

}

else if (val[mid] value)

{

start = mid + 1;

}

mid = ( start + end )/2;

}

if (val[mid] == value)

return mid;

else

return -1;

}

int main()

{

int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};

int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);

if (result 0)

{

printf("查无此数");

}

}

C语言中的2分法是什么意思 怎么弄 例如这题

) 用二分法求下面方程在(-10,10)之间的根。 2x3-4x2+3x-6=0【提示】(1) 取两个不同点x1、x2,如果f(x1)和f(x2)符号相反,则(x1,x2)区间内必有一个根(曲线与x轴的交点)。如果f(x1)与f(x2)同符号,则应改变x1、x2,直到f(x1)、f(x2)异号为止。注意x1、x2的值不应相差太大,以保证(x1,x2)区间只有一根。

(2) x1和x2两点之间的中点x=(x1+x2)/2,见图4-1,再从x求出函数值f(x)。

(3) 若f(x)与f(x1)同符号,则根必在(x,x2)区间内,此时将x作为新的x1;如果f(x)与f(x2)同符号,则表示根在(x1,x)区间内,将x作为新的x2。

(4) 重复步骤(2)和(3),直到|f(x)|ε为止,ε为一个很小的数。此时认为f(x)≈0,x即为根。

根据上述思路画出N-S流程图,如图4-2所示。源程序命名为p5_8.c。

#include math.h

#include stdio.h

double fun(double x) { return 2 * x * x * x - 4 * x * x + 3 * x - 6; }

double root(double a, double b, double e)

{

double x1, x2, y1, x, y;

x1 = a; x2 = b;

do {

x = (x1 + x2)/2;

y = fun(x);

y1 = fun(x1);

if( ( y 0 y1 0) || (y 0 y1 0) )

x1 = x;

else

x2 = x;

/*end if*/

}while(fabs(y) e);

return x;

}

int main(void)

{

double x = root(-10.0f, 10.0f, 1e-8);

printf("%f\n", x);

return 0;

}