1.折半查找
2.插叙查找
就是把1中的mid = (low+high)/2改为mid = low + (key - a[low])*(high - low)/(a[high] - a[low]);
具体代码如下:
#include<stdio.h> int Bisearch(int *a,int n, int key); int main() { int a[100]; int i = 0; int key = 0; int n = 0; int return_number; printf("Please Enter how many you want to input numbers!\n"); scanf("%d", &n); printf("Please Enter %d numbers!\n", n); for(; i <= n - 1; i++) { scanf("%d", &a[i]); } printf("Please Input the search number!\n"); scanf("%d", &key); return_number = Bisearch(a, n, key); if(return_number != 0) { printf("查找成功!\n"); printf("查找到%d的位序是%d\n", a[return_number], return_number); } else { printf("查找失败,未找到该数!\n"); } } int Bisearch(int *a,int n, int key) { int low, high, mid; high = n-1; low = 0; while(low <= high) { //mid = (low + high)/2;//折半查找 mid = low + (key - a[low])*(high - low)/(a[high] - a[low]);//插值查找 if(a[mid] < key) { low = mid + 1; } else if(a[mid] > key) { high = mid - 1; } else { return mid; } } return 0; }