C語言折半查找法的超詳細講解
折半查找法僅適用於對已有順序的數組、數據進行操作!!!(從小到大)自我總結:折半查找法就是相當於(通過改變low或high的大小)把中間位置指到瞭key那個數那裡,所以mid應該處於循環裡面,即mid=(high+low)/2。註意:low,mid,high都要與下標綁定,也就是說它們就是下標。且循環條件是:high>=low.
同時註意:⑴若原來數組是由小到大排列的則:
mid=(high+low)/2; if(key<a[mid])//說明要找的值在左邊 high=mid-1; else if(key>a[mid])//說明要找的值在mid右邊 low=mid+1;//最小值的位置往右進一位
㈡若原來數組是由大到小排列的則:
mid=(high+low)/2; if(key>a[mid])//註意是由大到小排列 ,所以此時key在a【mid】 左邊,故high=mid-1 ; high=mid-1; else if(key<a[mid])//註意是由大到小排列,所以此時key在a【mid】右邊,故low=mid+1; low=mid+1;
當然在下面這個代碼中,也可以用選擇排序法和冒泡法來對任意數組進行排序,然後在應用此函數,保證折半查找法的前提是排好序瞭。
#include<stdio.h> void zb(int key,int a[],int n)//key表示要找的數,a表示數組,n表示數組元素個數 { int i,high,low,mid; int count1=0,count=0; low=0; high=n-1; while(high>=low)//保證右下標不小於左下標 { count++; mid=(high+low)/2;//總的來說變得是中間位置相當於把中間位置移到瞭key那個數那裡,所以mid應該處於循環裡面 if(key<a[mid])//說明key在a【mid】的左半邊 ,那麼最右邊的high下標就可以在下標mid基礎上往左進一個單位瞭 high=mid-1; else if(key>a[mid])//說明key在a【mid】的右半邊 ,那麼最左邊的low下標就可以在下標mid基礎上往右進一個單位瞭 low=mid+1; if(key==a[mid]) { printf("元素找到瞭!!!\n一共查找瞭%d次\n它處於a[%d]位置上\na[%d]=%d\n",count,mid,mid,key); count1++; break; } } if(count1==0) printf("元素不存在!!!\n"); } int main () { int key,n,a[100]; int i; void zb(int key,int a[],int n);//聲明定義函數 printf("請輸入數組元素個數:\n"); scanf("%d",&n); printf("請輸入(從小到大)所有數組元素:\n"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("請輸入要查找的數:\n"); scanf("%d",&key); zb(key,a,n); printf("\n"); return 0; }
總結
到此這篇關於C語言折半查找法的文章就介紹到這瞭,更多相關C語言折半查找法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!