- 不管是二分查找法还是拉格朗日法,必须先排序,否则无法使用。
- 插值查找发速度比二分查找法要快
- 插值查找法,数据均匀是1次找到,不均匀是多次,即使这样这样它也是快于二分的。
- 那个1.0挺重要的一个技巧,将那个比例变成实数。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #define N 1024 void search(int a[N],int num) { int tou = 0; int wei = N - 1; int zhong; int flag = -1;//代表找不到 int ci = 0; while (tou <= wei)//循环 { zhong =( tou + wei) / 2;//取中间值 printf("\n%d,%d,%d,%d", tou, wei, zhong, ++ci); if (num==a[zhong]) { printf("找到,a[%d]=%d", zhong, num); flag = 1; break; } else if (num> a[zhong]) { tou = zhong + 1; } else { wei = zhong - 1; } } if (flag ==-1) { printf("没有找到"); } } void search2(int a[N], int num) { int tou = 0; int wei = N - 1; int zhong; int flag = -1;//代表找不到 int ci = 0; while (tou <= wei)//循环 { zhong = tou + (wei - tou) *1.0* (num - a[tou]) / (a[wei] - a[tou]); //乘以0.1是为了防止误差。 printf("\n%d,%d,%d,%d", tou, wei, zhong, ++ci); if (num == a[zhong]) { printf("找到,a[%d]=%d", zhong, num); flag = 1; break; } else if (num > a[zhong]) { tou = zhong + 1; } else { wei = zhong - 1; } } if (flag == -1) { printf("没有找到"); } } void main() { int a[N]; for (int i = 0; i < N; i++) { a[i] = i; printf("%d ", i); } int num; scanf("%d", &num); search2(a, num);//调用函数查找 system("pause"); }
时间: 2024-11-07 20:52:49