zoukankan      html  css  js  c++  java
  • C语言二分查找

    #include <stdio.h>
    
    /*
    二分查找条件: 1、有序序列  2、数据在数组中
    */
    
    
    int baseBinarySearch(int a[],int h,int k)
    {
        int low=0;
        int high=h;
        int mid =0;
        int NoFound = -1;
        while (low <= high)
        {
            mid = low + (high-low) /2 ;
            if ( k < a[mid] )
            {
                high = mid - 1;
            }
            else if ( k > a[mid] )
            {
                low = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return NoFound;
    }
    
    
    //查找第一个相等的元素
    int FirstElementBinSearch(int a[],int h,int k)
    {
        int low=0;
        int high=h;
        int mid =0;
        int NoFound = -1;
        while (low <= high)
        {
            mid = low + (high-low) /2 ;
            if ( k <= a[mid] )
            {
                high = mid - 1;
            }
            else
            {
                low = mid + 1;
            }
        }
        return low <= h ? low : NoFound;
    }
    
    //查找最后一个相等的元素low
    
    int LastElementBinSearch(int a[],int h,int k)
    {
        int low=0;
        int high=h;
        int mid =0;
        int NoFound = -1;
        while (low <= high)
        {
            mid = low + (high-low) /2 ;
            if ( k >= a[mid] )
            {
               low = mid + 1 ;
            }
            else
            {
                high = mid -1 ;
            }
        }
        printf("%d %d %d
    ",low,high,a[low-1]);
    
        if (low - 1 >= 0 && a[low - 1] ==k)
        {
            return low-1;
        }
        return NoFound;
    }
  • 相关阅读:
    HBase On Spark
    Hive安装配置要点
    通过拆分,提高表的访问效率
    使用冗余统计表
    优化表的数据类型
    以题目为鉴,如何做数学笔记
    思维训练素材整理
    三角函数知识点
    穿针引线法的前世今生
    集合知识点
  • 原文地址:https://www.cnblogs.com/flashBoxer/p/9471527.html
Copyright © 2011-2022 走看看