數(shù)據(jù)結(jié)構(gòu)折半查找算法 用遞歸法寫一個折半查找的算法?
用遞歸法寫一個折半查找的算法?半搜索需要先對數(shù)據(jù)進行排序。以上是氣泡排序算法的實現(xiàn)。半搜索算法描述如下:在一個有序表中,將要搜索的數(shù)據(jù)值與搜索范圍的中間元素值進行比較,會出現(xiàn)三種情況:1)如果要搜索的
用遞歸法寫一個折半查找的算法?
半搜索需要先對數(shù)據(jù)進行排序。以上是氣泡排序算法的實現(xiàn)。半搜索算法描述如下:在一個有序表中,將要搜索的數(shù)據(jù)值與搜索范圍的中間元素值進行比較,會出現(xiàn)三種情況:
1)如果要搜索的數(shù)據(jù)值正好等于中間元素值,則放回中間元素值的索引。
2)如果要搜索的數(shù)據(jù)的值小于中間元素的值,則整個搜索范圍的前半部分將用作新的搜索范圍,并且1)執(zhí)行,直到找到相等的值。
3)如果要搜索的數(shù)據(jù)的值大于中間元素的值,則整個搜索范圍的后半部分將用作新的搜索范圍,并執(zhí)行1)直到找到相等的值。4) 如果最后找不到相等的值,則返回錯誤消息。實現(xiàn)過程如下:復(fù)雜性分析:半搜索就像搜索素數(shù)二叉樹:中間值是二叉樹的根,前半部分是左子樹,后半部分是右子樹。半搜索方法的搜索次數(shù)正好是值所在的層數(shù)。在等概率的情況下,它是關(guān)于log2(n1)-1的,算法復(fù)雜度為O(logn)。
用遞歸法寫一個折半查找的算法?
//二進制搜索前置條件數(shù)組元素按升序排序
int Binsearch(int value,int a[,int narraylen)
{
int nmid=narraylen/2
if(value==a[nmid])
return nmid//找到下標(biāo)
if(nmid==0)
return-1//找不到
if(value
return返回Binsearch(value,a,nmid)
else
return Binsearch(value,a nmid,narraylen-nmid)
}
/*在使用之前我根本沒有仔細調(diào)整過它*/void insert(int*array,int len,int x){if(len==0){/*數(shù)組元素整體向后移動*/*array=x return}if(x<=array[len/2])//向下舍入insert(array,len/2,x)else插入(&;數(shù)組[len/2,1],len/2,x)}