當前位置:首頁 » 編程軟體 » 編程折半法

編程折半法

發布時間: 2024-10-12 13:11:59

c語言編程實現「折半查找」的過程。

折半查找的演算法思想是將數列按有序化(遞增或遞減)排列,查找過程中採用跳躍式方式查找,即先以有序數列的中點位置為比較對象,如果要找的元素值小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查找區間縮小一半。 折半查找是一種高效的查找方法。它可以明顯減少比較次數,提高查找效率。但是,折半查找的先決條件是查找表中的數據元素必須有序。參考程序,希望對你有所幫助!
#include<stdio.h>
void main()
{
int a[20],x,i,start,end;
printf("input 20 numbers:\n");
for(i=0;i<20;i++) scanf("%d",&a[i]);
printf("please enter the number:\n");
scanf("%d",&x);
for(start=0,end=19;start<=end;)
{
i=start+(end-start)/2;
if (x==a[i])
{
printf("%d",i+1);
getch();
return;
}
else if (x>a[i]) end = i-1;
else start=i+1;
}
}

㈡ 如何計算折半查找的平均查找長度

折半查找可以藉助於一個二叉樹來描述。

為了簡化討論,則把這棵樹近似看成滿二叉樹,設二叉樹的高度為h(h>1)

則,根據二叉樹的性質,它有最大節點數n=2^h-1,

則h=log2(n+1) (2是底數)。那麼二叉樹的第j層節點數為:2^(j-1)

假定每個元素的查找概率相等,則,pi=1/n (pi為第i個節點的查找概率)

那麼平均查找長度為 1/n*(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))

則經過化簡計算,得平均查找長度為:((n+1)/n ) *log2(n+1)-1 (其中對數中的2為底數:即log以2為底(n+1)的對數)

注 : 當n很大時 ,可近似為 log2(n+1)-1

搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找。

而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索演算法每一次比較都使搜索范圍縮小一半。

(2)編程折半法擴展閱讀:

假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查找的數是X,其基本思想是: 設查找數據的范圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用X與中點元素am比較,若X等於am,即找到,停止查找。

否則,若X大於am,替換下限l=m+1,到下半段繼續查找;若X小於am,換上限h=m-1,到上半段繼續查找;如此重復前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到信息,程序結束。

用待查關鍵字值與中間位置的關鍵字值進行比較;若相等,則查找成功若大於,則在後(右)半個區域繼續進行折半查找若小於,則在前(左)半個區域繼續進行折半查找。

對確定的縮小區域再按折半公式,重復上述步驟。最後,得到結果:要麼查找成功, 要麼查找失敗。折半查找的存儲結構採用一維數組存放。

熱點內容
linux是實時系統嗎 發布:2024-11-24 07:23:17 瀏覽:142
java數據挖掘演算法 發布:2024-11-24 07:18:59 瀏覽:853
我的世界伺服器怎麼重開指令 發布:2024-11-24 07:14:13 瀏覽:155
python刪除dataframe 發布:2024-11-24 07:05:38 瀏覽:734
安卓機藍牙怎麼傳東西 發布:2024-11-24 06:58:34 瀏覽:108
android疊效果 發布:2024-11-24 06:58:33 瀏覽:991
富士通電腦伺服器設置u盤啟動 發布:2024-11-24 06:56:21 瀏覽:716
delphipython 發布:2024-11-24 06:51:24 瀏覽:866
安卓手機如何添加文字 發布:2024-11-24 06:50:54 瀏覽:567
小米存儲位置設置 發布:2024-11-24 06:45:10 瀏覽:207