精华内容
下载资源
问答
  • C语言折半查找法.doc
  • C语言折半查找

    2019-04-18 09:39:49
    有10个整数已按从小到大的顺序排好序,存储在一个数组中,再输入一个数,要求用折半查找法找出该数是数组中的第几个元素(输出该元素的下标即可)。如果该数不在数组中,则输出"Not exist!" 输入 输入数据共2行 ...

    题目描述

    有10个整数已按从小到大的顺序排好序,存储在一个数组中,再输入一个数,要求用折半查找法找出该数是数组中的第几个元素(输出该元素的下标即可)。如果该数不在数组中,则输出"Not exist!"

    输入

    输入数据共2行

    第一行10个整数,按从小到大的顺序输入,中间以空格分隔。

    第二行1个整数

    输出

    折半查找所得该数所在数组中的元素下标,单独占一行。

    若该数不存在,则输出一行信息 "Not exist!"

    样例输入

    1 2 3 4 5 6 7 8 9 10
    3

    样例输出

    2

     

     

    提示

     


    折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。

    C语言第四版教学实验-第六章 数组

    #include<stdio.h> 
    int main() 
    { 
    int n=9,m,i,a[10],j=0,k,s=0; 
    for(i=0;i<10;i++) 
    scanf("%d",&a[i]); 
    scanf("%d",&m); 
    while(1) 
    { 
    s++; 
    k=n; 
    n=(n+j)/2; 
    if(a[n]==m) 
    {
    printf("%d\n",n);break; 
    } 
    else if(a[n]<m) 
    j=k;else j=0; 
    if(s==11) 
    { 
    printf("Not exist!\n"); 
    break; 
    } 
    } 
    return 0; 
    } 
    
    展开全文
  • C语言折半查找法.rar
  • 关于折半查找的基本思想:首先得到一堆数组例如数组a[N],通过数学中的二分法思想我们将查找元素利用这种方法确定他们的中查找元素的下标,我个人定义就用left(左)and right(右)来表示范围,然后用mid=(left+right)/...

    关于折半查找的基本思想:

    首先得到一堆数组例如数组a[N],通过数学中的二分法思想我们将查找元素利用这种方法

    确定他们的中查找元素的下标,我个人定义就用left(左)and right(右)来表示范围,然

    后用mid=(left+right)/2来表示中间值进行比较。设查找元素为m,如果m值大于中间元素值,

    则下一次查找范围落在mid+1~right之间;反之理同。一直到left>right时,查找结束。

    主要流程:while (left <= right)

    {

    mid = (left + right) / 2;//得到中间值

    if (m 

    else if (m > a[mid]) left = mid + 1;//要查找元素大于中间值,往右移一步;

    else return(mid);//这里是刚好中间元素就是我们要查找得下标符直接return返回

    }

    return (0);//这里的return返回指的是我们需要查找得对象不在这个数组中,里面中的()返回数字自己定

    在主函数中加个if(返回值)情况下代表没找到。

    当然这里我用的是函数的方法。

    如果不用函数的话就直接在else return(mid);

    后加printf(“”)打印出下标符return (0);

    这里改成printf("没找到!\n");mid = (left + right) / 2;

    当然部分情况下我们如果输入的数组是字符串的话,或者无序列的数字就要加上strlen库函数,也要加头文件mid =strlen( (left + right)) / 2;

    然后基本的操作自己实操就OK了。求赞QWQ;

    标签:折半,right,return,元素,mid,C语言,查找,left

    来源: https://blog.51cto.com/u_15145910/2767275

    展开全文
  • c语言折半查找

    2016-11-10 16:46:00
    折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储.  折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字...

      折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储.

      折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找.不断重复上述过程,直到查找成功 或所有查找区域无记录,查找失败.

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 //折半查找,又称为二分查找 ,条件保证要好排序的, 不适合应用在 频繁的插入操作,因为会打乱顺序
     5 int Binary_Search(int *a,int n,int key)
     6 {
     7     int low,high,mid;
     8     low = 0;    //定义最低下标为记录首位
     9     high = n;   //记录最高下标为记录末位
    10 
    11     while ( low <= high )
    12     {
    13         mid = (low + high) / 2;
    14         if (key < a[mid]) {
    15             high = mid - 1;//最高位下标调小 一位
    16         } else if(key > a[mid]){
    17             low = mid + 1; //最低下标调整到中位下标大一位
    18         } else{
    19             return mid; //代表就是次位置
    20         }
    21     }
    22     return -1; //没有找到返回-1
    23 }
    24 
    25 void main()
    26 {
    27     int a[] = {1,2,3,4,5,6,7,8,9,10};
    28 
    29     //需求要查找8, 如果用传统的方式 要查找8次才能得出
    30     int index;
    31     index = Binary_Search(a, sizeof(a) / sizeof(int),8);
    32 
    33     if (index == -1)
    34         printf("没有找到");
    35     else
    36         printf("找到了,index为:%d",index);
    37 }

     

    展开全文
  • C语言 折半查找

    千次阅读 2015-03-22 15:45:29
    自己编写一个折半查找 #include int search(int a[],int m,int len) { int left=0; int right=len-1; int mid; while(left) { mid=(right+left)/2; //求中间的数的下标值 if(a[mid])

    自己编写一个折半查找

    #include <stdio.h>
    int search(int a[],int m,int len)
    {
        int left=0;
        int right=len-1;
        int mid;
    
        while(left<=right)
        {
            mid=(right+left)/2; //求中间的数的下标值
            if(a[mid]<m)
            {
                left = mid+1;   //如果中间值小于给定的则该数在中值得右边
            }
            else if(a[mid]>m)
            {
                right = mid-1;  //如果中间值大于给定的则该数在中值得左边
            }
            else
                return mid;
        }
        return -1;              //如果该值在范围内则返回-1
    }
    int main()
    {
        int a[]={1,3,5,7,9,11};
        int p=search(a,7,sizeof(a)/sizeof(a[0]));
        printf("%d",p);
        return 0;
    }
    



    展开全文
  • C语言折半查找(二分查找) 查找用户输入的数是否在已经按顺序定义好的一组数上 #include <stdio.h> void main() { int a[10] = {-11, 0, 8,16,32,64,128,130,260,320}; int low,mid,high; int n;//查找...
  • MongoDB管理工具的插件系统MongoDB管理工具 MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了. 最近准备着手插件系统的开发,简 .....
  • 有一个数组 v 已经按升序...解决这个问题的一个普遍方法是折半查找。下面是程序:#include int binsearch(int x, int v[], int n);main(){int i, result, n;int wait;int x = 17;// 需要查找的数值int v[19]; // ...
  • C语言折半查找DEMO

    2012-12-20 11:40:47
    C语言折半查找】 #include #include int binserarch(int x,int v[],int n); int main(void) { int v[]={10,20,30,40,50,60}; /*由小到大排序好的数据*/ int x; /*存放要查找的数*/ int arr_size; in
  • c语言折半查找

    千次阅读 2019-10-15 09:17:48
    # include int BinSearch ( int arr [ ] , int len , int key ) { int low = 0 ; //起始元素 int high ...//右边查找 ...//查找值为0~14 ...运行结果如下:(-1表示未查找到该值)
  • C语言折半查找

    2020-01-07 18:16:29
    折半查找2X3-4X2+3X-6=0的一个近似解 #include<stdio.h> #include<math.h> int main() { float x1,x2,x,f1,f2,f; do { printf("Please input.\n"); scanf("%f%f",&x1,&x2); f1=((2*x1-4)*x1...
  • 近期研习C语言,谭浩强《C语言程序设计(第2版)》P167.6原题: 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。因...
  • C语言 折半查找(二分查找)

    千次阅读 2015-10-25 10:03:10
    折半查找
  • 折半查找法(C语言)#include #define max 20int binary(int x,int list[],int n) /*从list[]中查找x*/{int low,high,mid;low=0;high=n-1;while(low<=high){mid=(low+high)/2; /*折半*/if(xhigh=mid...
  • c语言折半查找算法(二分查找)

    千次阅读 2018-11-04 21:59:07
    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素...
  • //// ****折半查找 // int ary[13] = {-8, 0, 5, 6, 8, 12, 17, 23, 32, 52, 64, 86, 100};//定义一个数组 // int start = 0;//开始位置 // int end = 12;//结束位置 // int mid = (start + end) / 2;//中间...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,143
精华内容 2,057
关键字:

c语言折半查找

c语言 订阅