zoukankan      html  css  js  c++  java
  • 算法的查找

    算法的查找,目前练习的是顺序查找,二分查找,分块查找以及哈希查找。

    1,顺序查找的话,优点是算法简单,对表的结构没有要求,对数组兼容极高,如果给它评个级的话:★★★★★

    当然它也有一个很大的缺点,得一个个从头查起,如果查询的数据少的话,还可以用用,数据多的话,那么它的效率是:★★。

    #include <stdio.h>
    int search(int a[],int y,int x); int main(void) { int i,x=0,n=0; int a[10]; printf("请输入是个数字! "); for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("请输入要查找的数字"); scanf("%d",&x); n=search(a,n,x); if(n>0) { printf("您查找的数 %d 在第%d 个位置上 ",x,n); } else { printf("没有您要找的数"); } return 0; } int search(int a[],int y,int x) { int i; for(i=0;i<10;i++) { if(a[i]==x) { y=i+1; break; } } return(y); }

      2,二分查找

    优点是:它查找数据的效率想必顺序更高效,可以减少数据的比较次数。查找的时间大大减少。效率:★★★

    但是它也有个很明显的缺点就是:查找表中的数据元素必须是有序的。 使用条件:★★★。

    int search(int a[],int min,int max);
    int main(void)
    {
         int i,min=0,n=0,max=9,x=0;
    	 int a[10];
    	 printf("请输入是个数字! 
    ");
    	 for(i=0;i<10;i++)
    	 {
    	  scanf("%d",&a[i]);
    	 }
    	 printf("请输入要查找的数字");
         scanf("%d",&x);
    	 n=search(a,min,max,x);
    	 if(n>0)
    	 {
    	 printf("您查找的数 %d 在第%d 个位置上
    ",x,n);
    	 }
    	 else
    	 {
    	 printf("没有您要找的数");
    	 }
    	 return 0;
    }
    int search(int a[],int min,int max,int x)
    {
            int mid;
    		while(min<=max)
    		{
    		     mid=(min+max)/2;
    			 if(a[mid]=x)
    			 {
    			      return mid+1;
    			 }
    			else if(a[mid]>x)
    			 {
    			 max=a[mid];
    			 }
                  else
    			  {
    			  min=a[mid];
    			  }
    		}
    		return -1;
    }
    

     3,分块查找,就是将数据数组分为一块块,然后找到要查找对应的方块中,大大缩减查找时间。效率:★★★★

    但是分块查找虽然对块中的节点没有要求,但快与快之间必须“按快排序”,后面一个快的每个值都必须大于前面一个快中的最大值。复杂度:★★★

     

    int search(int a[],int n);
    struct cover
    {
    int start;
    int end;
    int key;
    }cover[4];
    int main(void)
    {
          int i,j=-1,k,n;
    	  int a[]={2,6,9,13,18,21,26,29,31,36,39,46,49,52,59,63,88,99};
    	  printf("已有的数组是
    ");
    	  for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
    	  {
    	  printf("%d ,",a[i]);
    	  }
    	  for(i=0;i<3;i++)
    	  {
    	       cover[i].start=j+1;
    		   j=j+1;
    		   cover[i].end=j+4;
    		   j=j+4;
    		   cover[i].key=a[j];
    	  }
    	  printf("现在请输入你想查找的数字
    ");
    	  scanf("%d",&k);
    	  n=search(a,k);
    	  if(n>0)
    	  {
    	  printf("你查询的值在第 %d个位置",n);
    	  }
    	  else
    	  {
    	  printf("没有你要查询的值");
    	  }
    	  return 0;
    }
    int search(int a[],int n)
    {
    	int i,j;
    	i=0;
         while(i<3&&n>cover[i].key)
    	 {
    	 i++;
    	 }
    	 if(i>=3)
    	 {
    	 return -1;
    	 }
    	 j=cover[i].start;
    	 while(j<=cover[i].end&&a[j]!=n)
    	 {
    	  j++;
    	 }
    	 if(j>cover[i].end)
    	 {
    	 return -1;
    	 }
    	 return j;
    }
    

      4,哈希算法,看了下好像有点麻烦,明天继续发上来,先弄个其他博主的链接

    哈希查找

  • 相关阅读:
    Tensorflow 搭建自己的神经网络(二)
    Tensorflow 搭建自己的神经网络(一)
    JSON简介
    JS 弹出框计时器
    【扫盲】史上最全的互联网专业词语汇总,小白必备,人手一套!
    推荐几个数据分析网站
    转:一位阿里人对数据模型建设的几点思考与总结
    数据模型设计心得
    数据仓库架构设计
    数据仓库建模与ETL的实践技巧(转载)
  • 原文地址:https://www.cnblogs.com/HuSay/p/4908020.html
Copyright © 2011-2022 走看看