数据结构 (六) -- 查找 排序

查找


个人笔记,侵删


折半查找又称二分查找。

他必须要求顺序存储结构,并且要求有序

在这里插入图片描述

int Search_Bin(SSTable ST,KeyType key)
{
	low=1;
	high=ST.length;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(ST.R[mid].key==key) return mid;
		else if(ST.R[mid]>key) high=mid-1;
		else low=mid+1; 
	}
	return 0;	
}

在这里插入图片描述

二叉排列树

二叉排序树的特点:所有的左子树都小于根节点,所有的右子树都大于根节点,并且,子树也是一棵二叉排序树。
在这里插入图片描述

声明

typedef struct
{
	KeyType key;		//关键字域
	InfoType otherInfo;	//其他数据项
}ElemType;
typedef strcut BSTnode;
{
	ElemType data;
	struct BSTnode *lchild,*rchild;
}BSTndoe,*BSTree;

插入

void InsertBST(BSTree &T,ElemType e)
{
	if(!T)
	{
		BSTree S=new BSTree;
		S->data=e;
		S->lchild=S->rchild=NULL;
		T=S;
	}
	else if(e.key>T->data.key) InsertBST(T->rchild,e);
	else InsertBST(T->lchild,e);
}

创建

void CreatBST(BSTree &T)
{
	T=NULL;
	cin>>e;
	while(e.key!=ENDFLAG)
	{
		InsertBST(T,e);
		cin>>e;
	}
}

平衡二叉树

二叉排序树的查找性能取决于二叉排序树结构,而二叉树的形状取决于数据集

如果有序那么查找时间复杂度为O ( n )如果结构合理查找的时间复杂度为O(log2n),事实上,树的高度越小,查找越快。 因此,提出了平衡二叉树,又称AVL树。

平衡二叉树或者是一棵空树,具有下面的特点:
(1)左右子树深度之差的绝对值不超过1
(2)左右子树也是平衡二叉树

在这里插入图片描述
在这里插入图片描述


平衡二叉树的平衡调整方法

很明显的,但把一棵树构造成一棵平衡二叉树,有利于查找的效率
那么如何将一个非平衡二叉树转换成一棵平衡二叉树:

若将二叉树上结点的平衡因子(Balance F a ctor, BF)定义为该结点左子树和右子树的深度之
差,则平衡二叉树上所有结点的平衡因子只可能觅-1、0和1。只要二叉树上有一个结点的平衡
因子的绝对值大于1 , 则该二叉树就是不平衡的

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


B树中的M阶是什么含义?

在这里插入图片描述


在这里插入图片描述


B树的背景

在这里插入图片描述


二次探测法

时空隧道


待续。。。(2021/1/16)

猜你喜欢

转载自blog.csdn.net/Touale/article/details/112709667