導航:首頁 > 數據處理 > 數據結構如何折半

數據結構如何折半

發布時間:2023-01-27 20:26:24

❶ 數據結構怎樣折半查找

舉個例子說明吧,在下面一堆數中找數字2
編寫代碼是先定義3個int類型的變數m,f,l,
初始時,將f==1的地址,l==7的地址,m=(f+l)/2
先遍歷m處的數據,它大於2,說明2在它的左邊,這個時候將l的值改一下,改成l=m-1(為什麼呢?因為你把l改成m-1,那麼下一次遍歷就在1到4之間查找了。)
l=m-1,f=1不變,m等於此時的l加f的和除以2,即m=(f+l)/2,那麼m就指向(1+4)/2=2.5的位置,但是m是int類型,在c中2.5取整後為2,所以m=2,m指向數組第二個位置,這個位置的數據就是2,查找成功!

初始時:
f=First m=Middle l=last
↓ ↓ ↓
1 2 3 4 5 6 7

第二次遍歷:
f m l
↓ ↓ ↓
1 2 3 4 5 6 7

❷ 數據結構折半查找演算法的方法

#include<stdio.h>

intDichotomy(inta[],int_value,intn){//二分法(也稱折半查找法)
intindex=0;//當前數組的首元素下標
intcurrent=n-1;//數組當前的大小
intk;//當前數組中間的數的下標

while(index<current)
{
//開始二分法查找
k=(index+current)/2;//除以2代表得到當前數組中間的數的下標
if(a[k]==_value)returnk;//返回要查找的值_value所在的下標

//否則比較要查找的值_value是在折半後的前半部分還是後半部分
if(a[k]<_value){//說明要查找的值在折半後的後半部分
index=k+1;//令index指向後半部分數組的首元素
}
else{//說明要查找的值在折半後的前半部分
current=k-1;//令current等於前半部分數組的長度
}

}
return-1;//返回-1代表沒有查找到該值(_value)
}
voidmain(){
intarr[5]={2,12,45,87,95};//前提是一組數組必須是有序數對(即按小到大或大到小)

if(Dichotomy(arr,87,5)!=-1)
printf("87在數組中對應的下標是:%d ",Dichotomy(arr,87,5));
elseprintf("沒有找到指定的值 ");
}
//用一句話概括二分法(折半查找法)的思想就是:在一組有序對數組中反復折半後得到中間數組的下標,然後再進行是否與要查找的值相等,若相等則返回當前要查找的值的下標。

那麼,上面的代碼的注釋與下面一一對應,它在執行的結果會產生兩種情況,第一種,不存在。第二種,存在。
先來說說第一種情況不存在:
1.如果給定要查找的值_value大於數組中最大的數,則index不斷增大從而促使while循環終止2.如果給定要查找的值_value小於數組中最小的數,則current不斷減少從而促使while循環終止(你自己可以動手在紙上畫一個數組,然後思路跟著代碼走就會知道或設單步調試亦可)

第二種情況存在:
1.要查找的數_value正好是在數組中間.那麼就執行了一次循環,當然這也是最理想的效果.

否則反復執行2和3:
2.如果要查找的數_value不存在中間,則判斷它是否大於中間的數還是小於中間的數,如果小於中間的數則說明_value應該在數組中間的前半部分,那麼current=k-1(即令current等於前半部分的長度),然後仍然採取折半的方法,反復此操作直至找到該數的下標為止.

3.如果要查找的數_value不存在中間,則判斷它是否大於中間的數還是小於中間的數,如果大於中間的數則說明_value應該在數組中間的後半部分,那麼index=k+1(即令index指向後半部分的第一個下標),然後仍然採取折半的方法,反復此操作直至找到該數的下標為止.

閱讀全文

與數據結構如何折半相關的資料

熱點內容
按鍵手機如何把信息存到內存卡上 瀏覽:248
民航傳統程序是什麼 瀏覽:114
賣車怎麼交易最安全 瀏覽:207
淘寶怎麼看別家產品分類 瀏覽:299
專業技術職稱怎麼改 瀏覽:796
信息技術a證怎麼考 瀏覽:973
網易雲怎麼退回交易貓 瀏覽:349
公安交警違章信息不對怎麼辦 瀏覽:742
中學畢業了能學什麼技術 瀏覽:799
兩極螺桿壓縮機市場前景如何 瀏覽:224
培訓小程序怎麼玩 瀏覽:381
廣州市致精測繪技術公司在哪裡 瀏覽:231
為什麼需要不合格品管理程序 瀏覽:397
農貿便民市場最適合做什麼 瀏覽:975
金鄉哪裡代理手工活 瀏覽:522
無菌技術操作包含什麼 瀏覽:900
小程序看一看視頻很難打開為什麼 瀏覽:332
曲靖經濟技術開發區包含哪些地方 瀏覽:415
信息網路通信運營商有哪些 瀏覽:82
泰普爾雲霧採用了什麼技術 瀏覽:828