一、C 程序实现
/*******************************************************************************************
*Description 插值查找算法
*Author liaoxiongxiong
*Version 1.0
*Time 2018-04-
*******************************************************************************************/
#include <stdio.h>
//插入查找,mid 位置自适应
int InsertSearch(int a[], int value, int low, int high)
{
int mid = low + (value - a[low])/(a[high] - a[low]) * (high - low);
if(a[mid] == value)
return mid;
if(a[mid] > value)
return InsertSearch(a, value, low, mid-1);
if(a[mid] < value)
return InsertSearch(a, value, mid+1, high);
return -1;
}
//测试用例
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int len = sizeof(a)/sizeof(a[0]);
int x=2; // 需要查找的元素
int i = InsertSearch(a, x, 0, len-1);
if(i!=-1)
printf("元素 %d 在第 %d 个位置\n",x,i+1);
else
printf("没有找到元素:%d\n",x);
return 0;
}
运行结果:
二、Java 程序实现
/**
* @description: 插值查找算法
* @author: liaoxiongxiong
* @version: 1.0
* @date: 2018-06-28
*/
public class InsertSearch {
//插入查找,mid 位置自适应
public static int insertSearch(int[] a, int value, int low, int high)
{
int mid = low + (value - a[low])/(a[high] - a[low]) * (high - low);
if(a[mid] == value)
return mid;
if(a[mid] > value)
return insertSearch(a, value, low, mid-1);
if(a[mid] < value)
return insertSearch(a, value, mid+1, high);
return -1;
}
//测试用例
public static void main(String[] args)
{
int[] a={0,1,2,3,4,5,6,7,8,9};
int len = a.length;
int x=2; // 需要查找的元素
int i = insertSearch(a, x, 0, len-1);
if(i!=-1)
System.out.printf("元素 %d 在第 %d 个位置\n",x,i+1);
else
System.out.printf("没有找到元素:%d\n",x);
}
}
运行结果:
三、Python 程序实现
# -*- coding: utf-8 -*-
"""
Description: 插值查找算法
Author: shujuxiong
Version: 1.0
Date: 2018-06-28
"""
##二分查找,版本2,递归式
def insertSearch(lists, value, low, high):
mid = int(low + (value - lists[low]) / (lists[high] - lists[low] * (high-low)))
if(lists[mid] == value):
return mid;
if(lists[mid] > value):
return insertSearch(lists, value, low, mid-1)
if(lists[mid] < value):
return insertSearch(lists, value, mid+1, high)
return -1
##测序用例
def main():
mylist = [0,1,2,3,4,5,6,7,8,9]
N = len(mylist)
x = 2 #需要查找的元素
i = insertSearch(mylist, x, 0, N-1)
if i != -1:
print("元素 %d 在第 %d 个位置\n" % (x,i+1))
else:
print("没有找到元素:%d\n" % x)
if __name__=='__main__':
main()
运行结果: