本文主要是介绍数据结构大总结系列之折半查找与动态查找树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据结构大总结系列之查找
前言:
近来对各种算法的研究中,发现会用到大量的基本查找和排序算法,如折半查找,二叉查找树,快速排序,堆排序,归并排序等等,心血来潮,于是特对其做一个总结,作为一种模板库,以后便可性手捏来。
废话不多说,下面从各种查找算法入手,排序算法的总结在稍后的章节进行总结。
一,顺序表的查找:
这是最简单的查找,就是从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,直到查找成功过,算法的平均查找长度为3/4(n+1)。
二,有序表的查找(折半查找):
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
#include <iostream>
using namespace std;
int binSearch(const int *Array,int start,int end,int key) { int left=start,right=end;int mid=0; while (left<right) { //注释中为递归算法,执行效率低,不推荐 mid=left+(right-left)/2; //防止溢出,编程之美260页/* if (key<Array[mid]) { return(binSearch(Array,left,mid,key)); } else if(key>Array[mid]){ return (binSearch(Array,mid+1,right,key)); } else return mid; */ if (key<Array[mid]) { right=mid-1; } else if(key>Array[mid]){ left=mid+1; } else return mid; } return -1;
}int main(){int Array[5]={1,2,3,4,5};cout<<binSearch(Array,0,4,3)<<endl;
}
三,二叉查找树:
二叉查找树种的左子树均小于它的根,右子树均大于它的根。
就
这篇关于数据结构大总结系列之折半查找与动态查找树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!