本文目录一览:
C语言二分法编程问题
/* 二分法插入排序的算法源程序*/
#includestdio.h
#define MAXNUM 100
typedef int KeyType;
typedef int DataType;
typedef struct {
KeyType key; /* 排序码字段 */
/*DataType info; 记录的其它字段 */
} RecordNode;
typedef struct {
int n; /* n为文件中的记录个数,nMAXNUM */
RecordNode record[MAXNUM];
} SortObject;
void binSort(SortObject * pvector) { /* 按递增序进行二分法插入排序 */
int i, j, left, mid, right;
RecordNode temp;
RecordNode *data = pvector-record;
for( i = 1; i pvector-n; i++ ) {
temp = data[i];
left = 0; right = i-1; /* 置已排序区间的下、上界初值 */
while (left = right) {
mid = (left + right)/2; /* mid指向已排序区间的中间位置 */
if (temp.key data[mid].key)
right = mid-1; /* 插入元素应在左子区间 */
else left = mid+1; /* 插入元素应在右子区间 */
}
for (j = i-1; j = left; j--)
data[j+1] = data[j]; /* 将排序码大于ki的记录后移 */
if (left != i) data[left] = temp;
}
}
SortObject vector={10, 49,38,65,97,76,13,27,49,50,101};
int main(){
int i;
binSort(vector);
for(i = 0; i vector.n; i++)
printf("%d ", vector.record[i]);
getchar();
return 0;
}
C语言编程 二分法求方程的根
这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。
方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。
所以了解了上述思想,那么else
if(f(a)*f(c)0)
b=c;
说明的是
f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else
a=c;说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!
C语言 二分法查找问题
#include
stdio.h
void
main()
{
float
x0,x1,x2,fx0,fx1,fx2;
do{
printf("enter
x1
x2:");
scanf("%f,%f",x1,x2);
fx1=(x1*(2*x1-4)+3)*x1-6;
fx2=(x2*(2*x2-4)+3)*x2-6;
}while(fx1*fx20);
/*如果f(x1),f(x2)同号,则在[x1,x2]区间无实根,重新输入x1,x2
*/
do{
x0=(x1+x2)/2;
/*求x1和x2间的中点:x0=(x1+x2)/2
*/
fx0=(x0*(2*x0-4)+3)*x0-6;
if((fx0*fx1)0){ /*如f(x0)与f(x1)不同号,把x0赋给x2,把f(x0)赋给f(x2)*/
x2=x0;
fx2=fx0;
}
else{ /*否则,把x0赋给x1,f(x0)赋给f(x1)*/
x1=x0;
fx1=fx0;
}
}while(fabs(fx0)=1e-5);/*判断f(x0)的绝对值是否小于某一个指定的值(如10的负5次方)*/
printf("x=%6.3f\n",x0);
/*输出x0*/
}
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个元素。所以,平均的比较次数大概如下:
这样分析,能看懂吗?希望能帮到你!