和上一篇折半查找很类似,只有四则运算不一样,思想类似。
只是在插值查找的过程中,考虑了查找键的值。
#include <iostream> using namespace std; //需要有序数组,最好是均匀分布的。 int binary_search(int *A,int n,int key) { int left=0,right=n-1; while(left<=right) { int mid= left + (int)(1.0*(key-A[left]))/(A[right]-A[left])*(right-left); if(key==A[mid]) return mid; else if(key<A[mid]) right=mid-1; else left=mid+1; } return -1; } int main() { int A[8]={4,7,9,12,15,34,36,67}; int key;cin>>key; cout<<binary_search(A,8,key); return 0; }
时间: 2024-10-24 02:05:08