首页 > 其他分享 >C语言二分法

C语言二分法

时间:2023-10-17 16:22:52浏览次数:37  
标签:right int mid C语言 二分法 printf left


//
//  main.c
//  BinarySearch
//
//  Created by steve xiaohu zhao on 2023/10/16.
//

#include <stdio.h>


// 二分法查找指定元素在数组中出现的索引位置
int BinarySearch(int *array, int length, int k) {
    int left, right, mid, NotFound = -1;
    
    // 设置左端点起点
    left = 0;
    // 设置右端点起点
    right = length;
    
    while (left < right) {
        
        // 计算中间元素坐标
        mid = (left + right) / 2;
        if (k < array[mid]) {
            // 调整有边界
            right = mid +1;
        } else if (k > array[mid]) {
            // 调整左边界
            left = mid + 1;
        } else {
            
            // 查找成功, 返回数据元素的下标
            return mid;
        }
    }
    
    // 循环结束如果没有找到对应的元素, 则返回 not found
    return NotFound;
}

int main(int argc, const char * argv[]) {
    int nums[100];
    
    // 0, 5, 10, 15, 20, 25, ...., 99*5 = 495
    for (int i = 0; i < 100; i++) {
        nums[i] = i * 5;
        printf("%d 的索引位置是:%d \n", i*5, i);
    }
    printf("====================================\n");
    int idx = BinarySearch(nums, 100, 20);
    
    printf("找到啦~~~索引值是:%d \n", idx);
    
    
    
    return 0;
}


标签:right,int,mid,C语言,二分法,printf,left
From: https://www.cnblogs.com/zxhoo/p/17770014.html

相关文章

  • C语言-从键盘输入字符直到#结束,并将字符写入文件
    C语言-从键盘输入字符直到#结束,并将字符写入文件#include<stdio.h>#include<stdlib.h>intmain(){ FILE*fp=NULL; charfilename[25]; charch; printf("inputsavedfilename:\n"); gets(filename);//从键盘输入字符串,与scanf功能类似,其原型是char*gets(char*str)......
  • C语言-将两个文件中的字符串拼接在一起写入第三个文件中
    C语言-将两个文件中的字符串拼接在一起写入第三个文件中步骤1.先创建两个文件A.txt和B.txt,分别写入123,456步骤2.编写程序#include<stdio.h>#include<stdlib.h>#include<string.h>//将A.txt和B.txt中的字符串拼接,放入C.txt中intmain(){ FILE*fa,*fb,*fc; inti,j,......
  • c语言模仿kfifo撰写的一个共用代码框架,可根据需要
    ////kfifo简化版本,根据需要进行改装//定义KFIFO结构体typedefstruct{uint8_t*buffer;//缓冲区指针uint32_tsize;//缓冲区大小,如果要求是2^n-1可以将取余操作修改为按位与操作,同时修改其他相关信息volatileuint32_tin;//入队指针......
  • 基于落点打分的井字棋智能下棋算法(C语言实现)
    本文设计了一种基于落地打分的井字棋下棋算法,能够实现电脑不败,所以如果玩家会玩的话,一般是平局。算法核心电脑根据对落子位置的打分,选择分数最高的位置,若不同落点分数相同则随机选择位置(随机选择就不会显得那么呆板)所以怎么打分是关键!基本思想是,判断落点附近的位置的棋子类型,......
  • C语言-数据类型
    C语音-数据类型数据类型中文名称空间大小(bite-字节)char字符串数据类1short(int)短整型2int整形4long长整形4longlong更长的整形8float单精度浮点数4double双精度浮点数8include<>intmain(){ //字符类型charch......
  • C语言线性表 demo
    typedefintPosition;typedefstructLNode*List;structLNode{ElementTypeData[MAXSIZE];PositionLast;};/*初始化*/ListMakeEmpty(){ListL;L=(List)malloc(sizeof(structLNode));L->Last=-1;returnL;}/*查找*/#d......
  • 实验二 c语言分支与循环基础应用编程
    实验一源代码#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){ intnumber; inti; srand(time(0)); for(i=0;i<N;i++) { number=rand()%(N2-N1+1)+N1; printf("20238329%04......
  • C语言实现顺序表二
    ////main.c//SeqList2////Createdbystevexiaohuzhaoon2023/10/15.//#include<stdio.h>#include<stdlib.h>#defineMAXSIZE100/*表示线性表的最大长度*///定义一个顺序表节点structSNode{//用来存储书序表中的数据(动态分配数组)......
  • 实验2 C语言分支与循环基础应用编程
    一、实验目的能正确使用if语句、switch语句实现分支结构能正确使用while语句、do...while语句、for语句实现循环结构能在具体问题场景中使用嵌套分支语句和嵌套循环语句能在具体问题场景中正确区分、使用continue和break能灵活、组合使用c语句编程解决简单应用问题二、实......
  • 实验2 C语言分支与循环基础应用编程
    练习1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0;i<N;++i){number=rand()%(N2-N1......