您好,登錄后才能下訂單哦!
一、什么是折半查找?
二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關鍵字大于查找關鍵字,則進一步查找前一子表,否則進一步查找后一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
算法復雜度編輯
二分查找的基本思想是將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,算法中止;如果x<a[n/2],則只要在數組a的左半部分繼續搜索x,如果x>a[n/2],則只要在數組a的右半部搜索x.
時間復雜度無非就是while循環的次數!
總共有n個元素,
漸漸跟下去就是n,n/2,n/4,....n/2^k(接下來操作元素的剩余個數),其中k就是循環的次數
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2為底,n的對數)
所以時間復雜度可以表示O()=O(logn)
二、折半查找原理
查找過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;如果某一特定元素大于或者小于中間元素,則在數組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。
三、C語言程序代碼
#include<stdio.h>
int binserch(int x,int m[],int n);
int main()
{
int a,jieguo;
int m[10]={1,2,3,4,5,6,7,8,9,10};
printf("請輸入要找的數:");
scanf("%d",&a);
jieguo=binserch(a,m,10);
if(jieguo==-1)
printf("沒找到!\n");
else
printf("在m[%d]位置找到%d\n",jieguo,a);
return 0;
}
int binserch(int x,int m[],int n)//x是要找的數,n為數據的長
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x<m[mid])
high=mid-1;
else if(x>m[mid])
low=mid+1;
else
return mid;
}
return -1;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。