二分法查找

简介: 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/53257477
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define max 20

typedef struct {
    int  data[max];
    int last;
}SequenList;


SequenList * init();                        //  新建顺序表并初始化
int search(SequenList * ,int  );            //  二分法查找
void show(SequenList *);                    //展示元素

int main (){
    SequenList * head = init();
    show(head);
    int key ;
    int s ;
    while(1){
    fflush(stdin);
    scanf("%d",&s);
    key = search(head,s);
    if (key >= 0 ){
        printf("该元素的位置是: %d \n",key+1);
    }else{
        printf("\n找不到该元素\n");
    }
    }
    system("pause");
    return 0;
}

SequenList * init(){
    SequenList * p = (SequenList*)malloc(sizeof(SequenList));
    p ->last = 0;
    int i = 0;
    p->data[0] = rand()%10;
    for (i = 1 ; i < 10 ; i ++ ){
        p->data[i] = p->data[i-1]+ rand()%10;
        p->last++;
    }
    return p;
}

int search(SequenList *  p , int key ){
    int low ,middle,high ;
    low = 0;
    high = p->last;
    middle = (low+high)/2;
    while (low <= high){
        if (key > p->data[middle]){
            low = middle+1;
        }
        else if (key < p->data[middle]){
            high = middle-1;
        }else{
            return middle;
        }
        middle = (low+high)/2;
    }
    return -1;
}
void show(SequenList * p ){
    int i = 0 ;
    for (i = 0 ; i < p->last ; i ++){
        printf("%d ",p->data[i]);
    }
    printf("\n");
}

运行结果如下

这里写图片描述

相关文章
|
2月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
6月前
|
算法 搜索推荐 Java
二分查找算法详解及实现
二分查找算法详解及实现
119 2
|
7月前
|
算法 测试技术 API
深入理解二分查找算法(一)
深入理解二分查找算法(一)
|
7月前
|
存储 算法 C#
C# | 二分查找算法的实现
二分查找法一种在**有序数组**中查找目标值的算法。划重点——“**有序**”,与需要遍历整个数组的查询算法不同,二分查找法通过将数组分成两部分来快速定位目标值所在的位置。 它的主要好处在于它的效率很高。因为它能够通过每次排除一半的元素来快速缩小搜索范围,因此在大型数据集上使用二分查找法可以显著提高查找速度。
67 0
二分法查找(折半查找)
二分法查找(折半查找)
79 0
|
机器学习/深度学习 存储 人工智能
“二分“==“二分查找“ ?“yes“:“no“;
“二分“==“二分查找“ ?“yes“:“no“;
127 0
二分法查找(非递归)
二分查找法是查找算法里面,经典又比较简单的一种。它适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再查找。 二分查找法的运行时间为对数时间O(㏒₂n),即查找到需要的目标位置最多只需要㏒₂n 步。假设从[0, 99]的队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次( 26 < 100 < 27)。
|
算法 Java C++
二分查找(折半查找)
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
158 0
二分查找(折半查找)
|
开发工具
顺序查找和二分查找的小总结
顺序查找和二分查找的小总结
顺序查找和二分查找的小总结