关闭

数据结构-二分查找(Binary Search)

标签: 数据结构二分查找
246人阅读 评论(0) 收藏 举报
分类:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define OPSETSIZE 7
#define MAXQSIZE 100
#define EQ(a, b) ((a) == (b))
#define LT(a, b) ((a) < (b))



typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int  length;
} SSTable;


int CreatSST(SSTable *sst, int n, ElemType key);
int Search_Seq(SSTable *ST, ElemType key);
int Search_Bin(SSTable ST, ElemType key);
int sort(SSTable *s, int n);

int main()
{
    printf("Please input the number of the static search table:\n");
    int n, i;
    scanf("%d",&n);
    printf("Please input a table:\n");
    SSTable sst;
    ElemType key;
    CreatSST(&sst, n, key);
    for(i= 0; i< n; i++)
        scanf("%d",&sst.elem[i+1]);
    printf("The static search table is:\n");
    for(i= 0; i< n ;i++)
        printf("%d%c", sst.elem[i+1], i== n- 1? '\n': ' ');
    printf("Please input the element to search:\n");
    scanf("%d", &key);
    printf("The position is %d\n", Search_Seq(&sst, key));
    printf("Next,using binary search->\n");
    printf("After sort,the static search table is:\n");
    sort(&sst, n);
    for(i= 0; i< n ;i++)
        printf("%d%c", sst.elem[i+1], i== n- 1? '\n': ' ');
    printf("Please input the element to search:\n");
    scanf("%d", &key);
    printf("The position is: %d\n", Search_Bin(sst, key));
    return 0;
}


int CreatSST(SSTable *sst, int n, ElemType key)
{
    int i= 0;
    sst->elem = (ElemType*)malloc((n + 1) * sizeof(ElemType));
    if(!sst->elem)
        exit(OVERFLOW);
    sst->elem[0] = key;
    sst->length = n;
    if(!sst->length)
        exit(OVERFLOW);
    return OK;
}

int Search_Seq(SSTable *ST, ElemType key)
{
    int i;
    ST->elem[0] = key;
    for (i=ST->length; !EQ(ST->elem[i], key); --i);
    return i;
}

int Search_Bin(SSTable ST,ElemType key)
{
    int low=1;
    int high=ST.length;
    while (low<=high)
    {
        int mid=(low+high)/2;
        if (EQ(key,ST.elem[mid])) return mid;
        else if (LT(key, ST.elem[mid])) high=mid-1;
        else low=mid+1;
    }
    return 0;
}

int sort(SSTable *s, int n)
{
    int i, j;
    ElemType temp;
    for(i = 1; i<= n; i++)
        for(j = 1; j<= n- i; j++)
            if(s->elem[j] > s->elem[j+1])
                temp = s->elem[j], s->elem[j] = s->elem[j+1], s->elem[j+1] = temp;
}


0
0
查看评论

算法导论第2章(3) 二分查找 binary search

二分查找(分治法)。 二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半。这样查找的时间复杂度为logN。因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的高度 logN+1,所以复杂度是O(logN)。 Java实现的二分查找 查找基类 /** ...
  • skywalkerVVV
  • skywalkerVVV
  • 2013-01-27 15:42
  • 3121

二分查找(Binary Search) 常见问题解决方法总结

缘由 今天浏览 何登成的技术博客  无意中发现了写的blog,二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现。 如下: 问题背景 今年的实习生招聘考试,我出了一道二分查找(Binary Search)的题目。题目大意如下: 给定一个升序排列的自然数数组...
  • gfsfg8545
  • gfsfg8545
  • 2013-12-13 21:48
  • 9183

STL之二分查找 (Binary search in STL)

 Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第45条的一个总结,阐述了各种查找算法的异同以及使用他们的时机。首先可供查找的算法大致有co...
  • applelppa
  • applelppa
  • 2007-11-21 23:05
  • 11535

BINARY SEARCH 的一点说明

在sap 之abap语言中,有‍BINARY SEARCH这个查找条件。使用read table 来读取内表时,使用‍BINARY SEARCH可以大大的提高查找的效率,为什么呢?学过数据库的人会知道,“二分查找”法,其实这个‍BINARY SEARCH就是这样方法来查找的。书中也许会说,在使用‍B...
  • xx4565715
  • xx4565715
  • 2015-01-12 15:04
  • 553

ABAP性能优化技巧—使用二分查找(Binary Search)选项

READ命令使用顺序查找数据表,这会降低处理速度。取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度。 在使用binary search之前必须首先将内表排序,否则有可能找不到记录,因为二分查找反复将查找区间对半划分,如果要查找的值小于查找区间的中间位...
  • Victor9279
  • Victor9279
  • 2016-11-02 14:52
  • 615

二分查找函数binary_search

函数模版: templatetypename T>int  binary_search (T arr[],  int size,  T target) ;参数说明:T: 模版参数arr :  数组首地址,...
  • touzani
  • touzani
  • 2007-05-26 23:57
  • 6042

C++ Binary Search Sort 二分查找排序算法

二分查找排序算法实际上是插入排序法的改进型,将数组分为排序过的和未排序过的,初始状态时排序过的部分就只有第一个元素,剩下的是未排序部分,设已排序数组的上界是第一个元素,下界也是第一个元素,自然地中间元素也是第一个元素。然后,从未排序部分的第一个元素(也就是整个数组的第一个元素)遍历到最后一个元素,与...
  • sinat_24310873
  • sinat_24310873
  • 2016-10-31 14:10
  • 422

sicily Binary Search 二分查找

题目Description实现二分查找函数,函数接口如下。/* size为数组s的实际大小。 假定s非递减有序,如果s中存在值为target的元素, 则返回最后一次出现的位序号,否则返回-1表示不存在。 位序号从0开始计。*/ int binSearch(const int s[], con...
  • mgsweet
  • mgsweet
  • 2017-01-07 11:22
  • 272

数据结构-BST(Binary Search Tree)

/****************************************** 数据结构: BST(Binary Search Tree),二叉查找树; 性质: 若结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若结点的右子树不空,则右子树上所有结点的值均大于它的根结点的值...
  • Jarily
  • Jarily
  • 2013-03-15 19:00
  • 7133

二分查找算法(Binary Search)的实现

用二分查找在已排序的数组中查看该数组是否含有一个特定的值是非常快速的,时间复杂度为O(lgn). 二分查找思想很简单,但是实现的时候会在边界条件上出现一些意想不到的问题。 现贴出自己写的程序,供大家参考。 第一个实现是基于迭代方式: /// /// implement Binary Sea...
  • beiyeqingteng
  • beiyeqingteng
  • 2010-07-15 03:09
  • 7337
    个人资料
    • 访问:10993次
    • 积分:446
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:3篇
    • 译文:0篇
    • 评论:2条
    文章分类