数据结构和算法之 查找

线性表查找算法

顺序查找

折半查找(线性表必须是已经排序好的)

 1     /**折半查找
 2      * @param obj
 3      * @param value
 4      */
 5     public static void  halfSort(int[] obj,int value){
 6         int len=obj.length;//获取数组的长度
 7         int min=0;
 8         int max=len-2;
 9         while (min<=max) {
10             int middle=(min+max)/2;//获取数组中间元素的下标
11             if(obj[middle]==value){
12                 System.out.println("zhaodao");
13                 return ;
14             }
15             else if (obj[middle]>value) {
16                 max=middle-1;    }
17             else{
18                 min=middle+1;
19                         }
20                          System.out.println("zhaodao失败");
21         }

折半查找

二叉查找树()

1若它的左子树非空,则左子树上所有结点的值均小于根结点的值

2若它的右子树非空,则右子树上所有结点的值均大于于根结点的值

3左右子树本身又是一颗二叉查找树

中序遍历二叉查找树所得的中序遍历序列是一个递增序列(左中右)

时间: 2024-08-10 23:16:21

数据结构和算法之 查找的相关文章

数据结构和算法————二分查找

  二分查找 这些天深刻的体会到了巩固知识的重要性.对数据结构和算法的学习有一年的时间,然后搁置了一年,最后发现都忘记了. 不过还好不是失忆,看了之前做过的笔记,还是能回想起来的. 现在想在写一遍,算是对本子上的笔记做一个备份,更重要的是加深我的印象. 首先说一下二分查找的思想:假设数据是按升序排序的,对于给定值val,从序列的中间位置开始比较. 如果当前位置值等于val,则查找成功: 若val小于当前位置值,则在数列的前半段中查找 若val大于当前位置值,则在数列的后半段中继续查找. 重复以上

数据结构与算法14—查找

查找 基本概念 查找就是在数据集中找出一个“特定元素”. 查找表是由同一类型的数据元素(或记录)构成的集合. 查找表是一种以集合为逻辑结构.以查找为核心的数据结构. 关键字 有时候我们需要指定某数据项的值来查找,这就用到了关键字. 关键字是数据元素中某个数据项的值,用以标识一个数据元素. 若此关键字可以识别唯一的一个记录,则称之谓“主关键字”:若此关键字能识别若干记录,则称之谓“次关键字”. 例: 对查找表经常进行的操作: 1)查询某个“特定的”数据元素是否在查找表中: 2)检索某个“特定的”数

数据结构与算法(c++)——查找二叉树与中序遍历

查找树ADT--查找二叉树 定义:对于树中的每个节点X,它的左子树中的所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项. 现在给出字段和方法定义(BinarySearchTree.h) #include <queue> class BinarySearchTree { private: struct Node { int value; Node* left; Node* right; }; Node* root; void insert(Node*, int); void trav

数据结构和算法--7查找算法

1.常用的查找算法 1) 顺序(线性)查找 2) 二分查找/折半查找 3) 插值查找 4) 斐波那契查找 2.查找 1)线性查找 A.题目: 有一个数列[1,43,22,-10,0],判断数列中是否包含此名称,如果找到了,就提示找到,并给出下标值. B,思路: 逐一查找 C.代码 package com.offcn.search; //线性查找 public class SeqSearch { public static void main(String[] args){ int[] arr =

数据结构与算法-链表查找倒数第K个值

查找链表中倒数第k个结点题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; int FindCoundDownInList(pListNode head,int num) { pListNode p1,p2; p1=p2=head; while(num-->0 && p1!=NULL) p1=p1->m_pNext; i

java 数据结构与算法 之查找法

一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public void searchDuty(){ Integer[]t=new Integer[]{1,2,3,4,5,6};//原数组 Integer key=10;//目标元素 Integer start=0;//开始位置 Integer end=t.length-1;//结束位置 while(start<

[数据结构与算法] : 二分查找

1 #include <stdio.h> 2 3 #define NotFound -1; 4 typedef int ElementType; 5 6 int BinarySearch( const ElementType A[], ElementType X, int N ) 7 { 8 int Low, Mid, High; 9 10 Low = 0; High = N-1; 11 while( Low <= High ) // 注意终止条件 12 { 13 Mid = (Low

java数据结构和算法------折半查找

1 package iYou.neugle.search; 2 3 public class Binary_search { 4 public static int BinarySearch(double[] array, double key) { 5 int left = 0; 6 int right = array.length - 1; 7 while (left <= right) { 8 int mid = (left + right) / 2; 9 if (array[mid] =

java数据结构和算法------顺序查找

1 package iYou.neugle.search; 2 3 public class Sequence_search { 4 public static int SequenceSearch(double[] array, double key) { 5 for (int i = 0; i < array.length; i++) { 6 if (key == array[i]) { 7 return i; 8 } 9 } 10 return -1; 11 } 12 }