本文目錄一覽:
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個元素。所以,平均的比較次數大概如下:
這樣分析,能看懂嗎?希望能幫到你!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/305073.html