插值查找
#include <stdio.h>
int bin_search( int str[], int n, int key )
{
int low, high, mid;
low = 0;
high = n-1;
while( low <= high )
{
mid = low + (key-a[low]/a[high]-a[low])*(high-low); // 插值查找的唯一不同點
if( str[mid] == key )
{
return mid;
}
if( str[mid] < key )
{
low = mid + 1;
}
if( str[mid] > key )
{
high = mid - 1;
}
}
return -1;
}
int main()
{
int str[11] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89};
int n, addr;
printf("請輸入待查找的關鍵字: ");
scanf("%d", &n);
addr = bin_search(str, 11, n);
if( -1 != addr )
{
printf("查找成功,可喜可賀,可口可樂! 關鍵字 %d 所在的位置是: %d\n", n, addr);
}
else
{
printf("查找失敗!\n");
}
return 0;
}
折半(二分)查找:
#include<stdio.h>
int BinSearch(int arr[],int len,int key) //折半查找法(二分法)
{
int low=0; //定義初始最小
int high=len-1; //定義初始最大
int mid; //定義中間值
while(low<=high)
{
mid=(low+high)/2; //找中間值
if(key==arr[mid]) //判斷min與key是否相等
return mid;
else if(key>arr[mid]) //如果key>mid 則新區間爲[mid+1,high]
low=mid+1;
else //如果key<mid 則新區間爲[low,mid-1]
high=mid-1;
}
return -1; //如果數組中無目標值key,則返回 -1 ;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10,11}; //首先要對數組arr進行排序
printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7));
return 0;
}