順序表查找——插值查找(比值查找)

原始:mid = low + 1/2(high-low)


新的:mid = low + (key-a[low]) / (a[high]-a[low]) * (high-low);


 

//數組下標從1-n開始存
#include<stdio.h>
#include<iostream>
using namespace std;

int Binary_Search(int *a, int n, int key)
{
	int low, high, mid;
	low = 1;
	high = n;
	
	while (low <= high)
	{
		mid = low + (key-a[low]) / (a[high]-a[low]) * (high-low);
		if (key < a[mid])
		{
			high = mid - 1;
		}
		
		else if (key > a[mid])
		{
			low = mid + 1;
		}

		else
			return mid;
	}

}


int main()
{
	int a[11] = { 0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99 };
	int s = 62;
	int x = Binary_Search(a, 11, s);
	cout << x << endl;
	getchar();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章