| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1028 人关注过本帖
标题:查找的几种简单算法(请指正)
只看楼主 加入收藏
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
结帖率:91.67%
收藏
 问题点数:0 回复次数:8 
查找的几种简单算法(请指正)
从键盘终端输入10个数存入一维数组
随意输入1个数    在数组中查找是否存在该数

[[it] 本帖最后由 新浪 于 2008-11-15 14:32 编辑 [/it]]
搜索更多相关主题的帖子: 算法 
2008-11-15 12:11
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
占个位
程序代码:
#include <stdlib.h> 
#include <stdio.h> 
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0])) 
int numeric (const int *p1, const int *p2) 
{ 
return(*p1 - *p2); 
} 


void Bsearch(int a[],int num) 
{ 
  int *itemptr; 

/* The cast of (int(*)(const void *,const void*)) 
is needed to avoid a type mismatch error at 
compile time */ 
  itemptr = bsearch (&num, a, NELEMS(a), sizeof(int), (int(*)(const void *,const void *))numeric); 
  if (!itemptr) 
     printf("%d is in the table.\n",num); 
  else 
    printf("%d isn't in the table.\n",num); 


} 



void BinarySearch(int a[],int v,int r)
{
  int m;
  int l=0;
  r=r-1;
  while(l<=r)
  {
    m=(l+r)/2;
    if(v==a[m])
    {
        printf("Found! The search number's location is: %d\n",m);
        return 0;
    }
    if(v<a[m])
      r=m-1;
    else
      l=m+1;
  }
  printf("Not found!\n");
  
}

void EnhancedSqSearch(int a[],int v,int r)
{
    int i=0;
    a[10]=v;
    while(a[i]!=v)
        i++;
    if(i<r)
        printf("Found! The search number's location is: %d\n",i);
    else
       printf("Not found!\n");
  
}

void SequentialSearch(int a[],int v,int r)
{
  int i;
  for(i=0;i<r;i++)
  {
    if(v==a[i])
    {
        printf("Found! The search number's location is: %d\n",i);
        return 0;
    }
    
  }
  printf("Not found!\n");
   
}

main()
{
    int a[11];
    int i,num;
    printf("Please input ten number: \n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    printf("Please input your search number: \n");
    scanf("%d",&num);
    printf("1):********\n");
    SequentialSearch(a,num,10);//顺序查找

    printf("2):********\n");
    EnhancedSqSearch(a,num,10);//增强顺序查找

    printf("3):********\n");
    BinarySearch(a,num,10);//二分查找

    printf("4):********\n");
    Bsearch(a,num);//库函数 Bsearch  只知道有这个东西  我不熟悉

}


[[it] 本帖最后由 新浪 于 2008-11-15 14:21 编辑 [/it]]

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-11-15 12:25
jay6254825
Rank: 1
来 自:江西师范大学软件
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-11-14
收藏
得分:0 
#include <stdio.h>
main()
{int a[10];
int i,m,yes=0;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<=9;i++)
if(m==a[i])
{printf("存在。\n");
yes=1;
break;}
if(yes==0)
printf("不存在.\n);
}

                                       我是J!~~
2008-11-15 12:44
VMwork
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-15
收藏
得分:0 
楼主签名里的问题我找到答案了
2008-11-15 13:20
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
代码帖出来了

比较短  是背诵的佳品

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-11-15 14:22
网易
Rank: 1
来 自:金星
等 级:禁止访问
帖 子:193
专家分:0
注 册:2008-6-10
收藏
得分:0 

答案是:雨中飞燕!
2008-11-15 17:13
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
第一个bsearch的最后一个参数,直接强制转换为(void*)就不会有警告了,或者你严格按照要求写比较函数,然后在比较函数里面转型也可以,那样写太臃肿了。
最后一个加强的顺序查找,其实是编译器进行了合并循环的优化而已,不是所有的编译器都支持,但本身又没有什么坏处,所以其实当一个公式记住,以后只用这种就OK。

块状查找呢?区域二叉查找呢?静态二叉树搜索呢?动态平衡树搜索呢?哈希法呢?这个明显不全嘛……
2008-11-15 17:22
网易
Rank: 1
来 自:金星
等 级:禁止访问
帖 子:193
专家分:0
注 册:2008-6-10
收藏
得分:0 
[bo][un]风居住的街道[/un] 在 2008-11-15 17:22 的发言:[/bo]

第一个bsearch的最后一个参数,直接强制转换为(void*)就不会有警告了,或者你严格按照要求写比较函数,然后在比较函数里面转型也可以,那样写太臃肿了。
最后一个加强的顺序查找,其实是编译器进行了合并循环的优化 ...

最后一个加强的顺序查找,其实是编译器进行了合并循环的优化
//我把查找的数添加到表的末尾   查找就一定会成功  这样就省了 每次循环检查是否到了表尾
如果先把数组排序一下  遇到大于等于查找键的元素 就可以提前退出循环了  和编译器没什么关系吧

你说的那些查找方法我还没学到呢  

答案是:雨中飞燕!
2008-11-15 17:39
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
[bo][un]网易[/un] 在 2008-11-15 17:39 的发言:[/bo]


最后一个加强的顺序查找,其实是编译器进行了合并循环的优化
//我把查找的数添加到表的末尾   查找就一定会成功  这样就省了 每次循环检查是否到了表尾
如果先把数组排序一下  遇到大于等于查找键的元素 就可以提 ...


哦,原来是你设置了哨兵……没仔细看……不过你这样极易破坏用户数据:如果查找元素多于10个怎么办?如果用户分配空间少于10个怎么办?

哨兵是个好办法,但是不能这么用。典型的用法是while (n-- && a[n] != v);然后根据n是否为-1来判断是否找到。
2008-11-15 17:52
快速回复:查找的几种简单算法(请指正)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017087 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved