C语言二分朝找,拉格朗日朝找
2015-12-16 18:36
417 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bwply2009/article/details/50331585
代码实现的查找方式只是适用于有序数组
二分查找法
//折半查找方法(也叫二分查找)适用于不经常变动而查找频繁的有序列表 int serachBinary(int * a,int num){ int count=0;// 循环次数 int flag=0; //找到是设置为1 即true int start=0,end=LEN-1,middle; while(start<=end){ middle=(start+end)/2; count++; printf("查找次数:start:%d,middle:%d,end:%d,%d\n",start,middle,end,count); if(a[middle]==num){ //找到了 flag=1; printf("数组a[%d]=%d",middle,num); break; }else if(a[middle]>num){ end=middle-1; }else{ start=middle+1; } } return flag; }
拉格朗日二分查找,比二分查找的效率更高
//拉格朗日插值查找 与二分查找的区别一行代码 //原理依据拉格朗日中值定理 // 如果是均匀数据,只需要一次查找就可以找到,使用拉格朗日中值查找 int serachLGLR(int *a,int num){ int count=0;// 循环次数 int flag=0; //找到是设置为1 即true int start=0,end=LEN-1,middle; while(start<=end){ /***********start 中值推理过程***********/ //middle=(start+end)/2; //middle=(start+end)*1/2 //middle=start+(end-start)* 1/2 //计算比值系数 //middle=start+(end-start)*1.0* (num-a[start])/(a[end]-a[start]); /**********end 中值推理过程************/ middle=start+(end-start)*1.0* (num-a[start])/(a[end]-a[start]); count++; printf("start:%d,middle:%d,end:%d,查找次数:%d\n",start,middle,end,count); if(a[middle]==num){ //找到了 flag=1; printf("数组a[%d]=%d",middle,num); break; }else if(a[middle]>num){ end=middle-1; }else{ start=middle+1; } } return flag; }
相关文章推荐
- c语言的二分查找简单实例
- 巩固C语言(四)-----冒泡排序 & 二分查找 & 单次循环对二维数组赋初值
- C语言快速查找与二分查找0804
- c语言 数组形参 二分查找 随机种子 猜数游戏
- HDU-1316 How Many Fibs? 大数、二分问题 (C语言)
- C语言【顺序表】冒泡排序,一次选出最大最小的数据,二分查找,初始化顺序表
- C语言 二分查找
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- C语言实现二分查找
- 【C语言】二分查找递归算法
- c语言 快速排序 和 二分 查找 模型
- C语言实现选择、冒泡、直接插入、归并、希尔、快速、堆排序与顺序、二分查找排序
- C语言实现 二分查找数组中的Key值(递归和非递归)
- 二分查找C语言实现
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 二分搜索(BinarySearch)的分治思想C语言实现
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- C语言二分查找
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 复习C语言算法——二分查找