数据结构大总结系列之折半查找与动态查找树

本文是数据结构总结系列之一,主要探讨查找算法,包括顺序表的查找、有序表的折半查找、二叉查找树的概念与实现,并提及平衡二叉搜索树,特别是红黑树在STL中的应用。通过对这些查找算法的分析,旨在提升查找效率。
摘要由CSDN通过智能技术生成

数据结构大总结系列之查找

前言:

近来对各种算法的研究中,发现会用到大量的基本查找和排序算法,如折半查找,二叉查找树,快速排序,堆排序,归并排序等等,心血来潮,于是特对其做一个总结,作为一种模板库,以后便可性手捏来。

废话不多说,下面从各种查找算法入手,排序算法的总结在稍后的章节进行总结。

一,顺序表的查找:

这是最简单的查找,就是从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,直到查找成功过,算法的平均查找长度为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;
}


三,二叉查找树 

二叉查找树种的左子树均小于它的根,右子树均大于它的根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值