二分法
適應情況:在一批有序數據中查找某數,在實際的應用中還會運用到冒泡法的排序方法
基本思想:選定這批數中居中間位置的一個數與所查數比較,看是否為所找之數,若不是,利用數據的有序性,可以決定所找的數是在選定數之前還是在之后,從而很快可以將查找范圍縮小一半。以同樣的方法在選定的區域中進行查找,每次都會將查找范圍縮小一半,從而較快地找到目的數。
例題:假設在數組a中的數據是按由小到大順序排序的:-12 0 6 16 23 56 80 100 110 115,從鍵盤上輸入一個數,判定該數是否在數組中,若在,輸出所在序號。
#define M 10
#include <stdio.h>
int main(){
int a[M]={-12,0,6,16,23,56,80,100,110,115};
int low,mid,high,b,found;
low=0;
high=M-1;
scanf("%d",&b);
while(low <= high){
mid=(low+high)/2;
if(b == a[mid]){
found =1;
break;
}else if(b>a[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(found ==1){
printf("The index of %d is %d",b,mid);
}else{
printf("There is not %d",b);
}
return 0;
}