查找笔记

原创 2016年05月31日 17:14:55

查找笔记
自己总结外加搬运,主要是自己复习用,如有雷同,望告知~!

1


普通数据查找,对于简单的查找,假设所有数据不重复,所要查找的数据位置不确定,所以要将数据进行遍历才能找到对应的数据。

int find(int array[], int  length, int value)  
{  
    if(NULL == array || 0 == length)  
        return -1;  

    for(int index = 0; index < length; index++){  
        if(value == array[index])  
            return index;  
        }  
    return 

最段时间为O(1),最大为O(n),平均为(1+n)/2。

2

日常中,数据都是有序的,对一个有序的数组,二分查找是最好的方法。
这里就要在查找钱先调用排序算法。

int binary_sort(int array[], int length, int value)  
{  
    if(NULL == array || 0 == length)  
        return -1;  

    int start = 0;  
    int end = length -1;  

    while(start <= end){  

        int middle = start + ((end - start) >> 1);  
        if(value == array[middle])  
            return middle;  
        else if(value > array[middle]){  
            start = middle + 1;  
        }else{  
            end = middle -1;  
        }  
    }  

    return -1

3排序二叉树

对于指针类型的数据,定义排序二叉树,每一个节点记录一个数据同时左分支的数据<根节点<右分支的数据。
链表实现:

#include <stdio.h>
#include <iostream>

using namespace std;

 struct node
{
    int data;
    struct node * lchild;
    struct node * rchild;
};

void Init(node *t)
{
    t = NULL;
}

node * Insert(node *t, int key)
{
    if (t == NULL)
    {
        node * p;
        p = (node *)new(node);
        p->data = key;
        p->lchild = NULL;
        p->rchild = NULL;
        t = p;
    }
    else
    {
        if (key < t->data)
            t->lchild = Insert(t->lchild, key);
        else
            t->rchild = Insert(t->rchild, key);
    }
    return t;    //important!
}

node * creat(node *t)
{
    int i, n, key;
    cout << "要输入多少个数据:";
    cin >> n;
    cout << "输入数据:";
    for (i = 0; i < n; i++)
    {
        cin >> key;
        t = Insert(t, key);
    }
    return t;
}

void InOrder(node * t)        //中序遍历输3出
{
    if (t != NULL)
    {
        InOrder(t->lchild);
        cout << t->data << " ";
        InOrder(t->rchild);
    }
}

int main()
{
    node * t = NULL;
    t = creat(t);
    InOrder(t);
    return 0;
}

4

哈希表 在处理中等规模的数据是很有效

相关文章推荐

mtk笔记和函数快速查找

  • 2011年05月24日 00:33
  • 231KB
  • 下载

C#的笔记 用于查找

  • 2013年11月08日 09:36
  • 1006B
  • 下载

【C++研发面试笔记】14. 基本数据结构-查找表与并查集

【C++研发面试笔记】14. 基本数据结构-查找表与并查集,Hash表,哈希表、STL,set, map, unordered_map, unordered_set...
  • tostq
  • tostq
  • 2016年10月03日 18:47
  • 780

《数据结构与算法C#语言描述》笔记12_二叉树和二叉查找树

十二.二叉树和二叉查找树 树的定义 树,由边连接的一些列节点。树是一种非线性的数据结构。 根节点,树上最高的节点。 父节点,某个节点的上层节点。 子节点,某个节点的下层节点。 叶子,没有任...

【笔记】Python 实现目录及子目录文件的查找

今天绕这个东西弄了一天,虽然很简单,但还是总结下吧1. 问题描述来自廖雪峰网站,操作文件和目录一节的习题 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印...
  • moshlwx
  • moshlwx
  • 2016年09月28日 22:01
  • 1375

【OpenCV学习笔记】二十四、轮廓查找与绘制(一)

轮廓查找与绘制(一) 1.查找轮廓——findContours() 2.绘制轮廓——drawContours() 先上ppt: ...

《算法导论》笔记 第12章 12.2 查询二叉查找树

【笔记】 【练习】
  • cyendra
  • cyendra
  • 2014年04月18日 12:06
  • 676

数据结构与算法笔记 —— 查找算法及代码实现

数据结构与算法笔记 —— 查找算法及代码实现一. 二分查找核心思想:将nn%个元素分成个数大致相同的两半,取a[n/2]a[n/2]与欲查找的xx作比较,如果x=a[n/2]x=a[n/2]则找到xx...

【汇编学习笔记】4:电话号查找(文件指针读取文件)

首先在一个文本文件中写入一些电话号码,为了读取的方便,指定它们有固定的格式,并且以dollar串结束符结束,便于用3FH号功能读取文件和09H号功能输出。 注意,虽然3FH号功能读入的东西,在输...

数据结构 学习笔记(完):散列查找:散列(哈希)表,散列函数的构造,冲突处理,性能分析

11.1 散列表(哈希表)11.1.1 散列的基本思路散列查找。先讲一个例子:比如说,C 语言编译的时候,C语言里有个规则就是变量名必须先定义(或声明)后再使用。当编译器碰到变量名的时候,它可能在两个...
  • Jurbo
  • Jurbo
  • 2017年07月11日 10:55
  • 628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查找笔记
举报原因:
原因补充:

(最多只允许输入30个字)