数据结构与算法查找

数据结构与算法系列文章

数据结构与算法-时间复杂度

数据结构与算法-线性表

数据结构与算法-树形结构

目录

一、查找的定义

二、线性表的查找

2.1、顺序查找

2.2、二分查找

2.3、分块查找

三、树表查找

3.1、二叉排序树

3.2、平衡二叉树

一、查找的定义

查找又称检索,是数据处理中经常使用的一种。采用何种查找方法,首先取决于使用哪种数据结构来表示“表”,及表中的数据元素按何种。查找有内查找和外查找之分,则称为内查找;反之,若查找过程需要访问外存,称为则外查找关键字的英文指数据元素(记录)中某个项或组合项的值,用它可以标识一个数据元素(记录)能唯一确定一个数据元素(记录)的关键字,称为主关键字;而不能唯一确定一个数据元素(记录)的关键字,称为次关键字。查找表的英文指由具有同一类型(属性)的数据元素(记录)组成的集合。分为静态查表和动态查找表。静态查找是指仅对查找表进行操作,而不改变查找表中的数据元素。动态查找是指除进行查找操作,可能还要进行向表中插入或。

二、线性表的查找2.1、顺序查找

顺序查找(SequentialSearch)是一种最基本也是最简单的查找方法。它的基本思想是蛮力法,从表的一端开始,顺序扫描线性表,逐个进行结点关键字值与给定的值?相比较,若当前扫描到的结点关键字?相等,则查找成功;若扫描整个表后,仍未找到关键字与给定值?相等的结点,查找则失败顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储,查找必须从头指针开始,因此只能进行顺序查找顺序查找代码如下。:

//蛮力法的算法

intn=;//规模

intk=20;//查找目标元素

NSMutableArray*array=[NSMutableArrayarray];

for(inti=0;in;i++){

NSNumber*number=

(arc4random()%n);

[arrayaddObject:number];

}

for(inti=0;in;i++){

NSNumber*number=array[i];

if([numberintValue]==k){

NSLog(

"找了%d次目标元素索引为%d",i,i);

break;

}

if(i==n-1){

NSLog(

"没有查找到目标元素");

}

}

顺序查找算法的时间复杂度为O(n)。顺序查找的优点是算法简单,且对表的结构无任何要求,无论用顺序表还是链表来存放结点,也无论结点是否按关键字有序,都同样适用。顺序查找的缺点是查找效率低,当?较大时,不宜采用顺序查找。对于线性链表,只能进行顺序查找。

2.2、二分查找

二分查找(BinarySearch)又称折半查找,是一种效率较高的查找方法。但是,二分查找要求线性表是有序表,即表中的数据元素按关键字有序组织,并且要用顺序表作为表的存储结构。在下面讨论中,假设有序表是递增有序的。二分查找的基本思想是减,首先将待查找的?值和有序表?中间位置中期=(1+m)/2上的结点的关键字进行比较:(1)若R[mid].keyk,则说明待查找的结点在表的前半部分中,可在前半部分表中继续进行二分查找。(3)若R[mid].key这样,经过一次关键字的比较就缩小一半查找区间;如此反复,直到找到关键字为?的结点(查找成功),或当前的查找区间为空(查找失败)。二分查找示例代码如下:

intn=;//规模

intkey=39;//查找目标元素

//初始化元素数组

NSMutableArray*array=[NSMutableArrayarray];

for(inti=0;in;i++){

NSNumber*number=

(arc4random()%n);

[arrayaddObject:number];

}

//对数组进行排序升序

NSArray*sortedArray=[arraysortedArrayUsingComparator:^NSComparisonResult(id_Nonnullobj1,id_Nonnullobj2){

return[obj1







































白癜风治疗哪家好
北京哪家医院看白癜风比较好



转载请注明:http://www.92nongye.com/zyjs/204621016.html