zoukankan      html  css  js  c++  java
  • 折半查找

    折半查找

    折半查找(二分查找)对处理元素要求

    • 有序
    • 顺序存储结构

    基本思想

    就是每次查找中间元素和待查找元素比较

    • 如果相同,返回该位置
    • 不同,且中间元素大于待查元素,则从右半边查找
    • 不同,且中间元素小于待查元素,则从左半边查找

         注意:如果前边标记大于小于后边标记了,那就说明没找到

    两种思路

    递归

    复制代码
    #include <stdio.h>
    int erfen_d(int *a, int begin, int end, int value)
    {
        if (end >= begin)
        {
            int mid = (begin + end) / 2;
            if (a[mid] == value)
                return mid;
            else if(a[mid] > value)
                return erfen_d(a, begin, mid-1, value);
            else
                return erfen_d(a, mid+1, end, value);
        }
        return -1;
    }
            
    int main()
    {
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        printf("%d**
    ",erfen_d(a, 0, 8, 9));//0是首位置,9是末位置, 9是待查元素
    return 0; }
    复制代码

    迭代

    复制代码
    #include <stdio.h>
    int erfen(int *a, int begin, int end, int value)
    {
        while (end >= begin)
        {
            int mid = (begin + end) / 2;
            if (a[mid] == value)
                return mid;
            else if(a[mid] > value)
                end = mid - 1;
            else
                begin = mid + 1;
        }
        return -1;
    }
    
            
    int main()
    {
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        printf("%d**
    ",erfen(a, 0, 8, 1)); //0是首位置,9是末位置, 1是待查元素
        return 0;
    }
    复制代码

    复杂度分析

    查找过程就是找二叉排序树,元素所在的高度即查找的次数(注意:第一层高度为1)

    满二叉排序树,有这样的特点:

    • 第h层最多元素个数:2k-1
    • 前h层最多元素个苏:2k-1

    分析(元素个数为N,高度k)

     
     
  • 相关阅读:
    理解Linux 的CPU Load和CPU利用率
    Linux进程和信号超详细分析
    Linux 磁盘配额
    linux磁盘阵列raid详解
    Linux LVM管理
    Linux fstab文件详解
    Linux 磁盘管理
    sourceTree的使用
    Logstash 参考指南(Kafka输入插件)
    ELK的一次吞吐量优化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3164993.html
Copyright © 2011-2022 走看看