一、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()
运行结果: