有序查找的三种算法
2015-03-27 21:50
204 查看
#include<stdio.h> int Binary_Search(int *a,int n, int key) { int low,high,mid; low = 0; high = n; while(low<=high) { mid = low +(high-low)*(key-a[low])/(a[high] - a[low]);//插值查找 //mid = (low+high)/2; //折半查找 if(key<a[mid]) high = mid - 1; else if(key>a[mid]) low = mid + 1; else return mid; } return 0; } int main() { int a[] = {0,1,16,24,35,47,59,62,73,88,99}; int b = Binary_Search(a,11,62); printf("key值的位置是:%d",b ); printf("\n\n"); }
上面是折半查找和插值查找,折半查找的前提条件是需要有序表存储,时间复杂度为O(logn),它显然好于顺序查找的O(n)时间复杂度。但对于频繁执行插入或删除操作的数据来书,不建议使用
/*斐波那契查找*/
int Fibonacci_Search(int *a,int n,int key)
{
int low,high,mid,i,k;
low=1;
high=n;
k=0;
while(n>F[k]-1)
{
k++;
}
for(i=n; i<F[k]-1; i++)
{
a[i] = a
;
}
while(low<high)
{
mid = low+F[k-1] -1;
if(key<a[mid])
{
high = mid-1;
k = k-1;
}
else if(key>a[mid])
{
low=mid+1;
k=k-2;
}
else
{
if(mid<n)
return mid;
else
return n;
}
}
return 0;
}
相关文章推荐
- 算法—8.有序数组中的二分查找
- 算法题之有序数组被折断后的查找
- [算法] 循环有序数组查找递归实现
- java最优有序查找——红黑树(RBT)算法
- 算法:有序数组删除重复元素,和查找等值键的问题
- 有序矩阵查找 -- 算法小结
- 整数型的有序递增数组循环右移x位后,查找指定整数 算法
- 详解Java数据结构和算法(有序数组和二分查找)
- 非有序的静态查找表的查找某个元素的算法
- 算法-分割有序数组后查值-二分查找的变形
- 算法学习之查找算法:静态查找表(2)有序表查找
- 数据结构与算法之整体有序数组的查找
- 经典面试算法题:线性查找有序二维数组
- 【数据结构】算法9.2 有序表查找-折半查找
- 算法基础 - 查找两个有序数组的中位数
- 字符串算法——查找有序数组旋转后的最小值(无重复元素)(Find Minimum in Rotated Sorted Array)
- 查找数字的三种算法的时间
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。
- KT学算法(二)——循环有序数组查找指定元素