zoukankan      html  css  js  c++  java
  • 递归与分治思想:治思想 && 折半查找法(迭代 && 递归)

      1 //分治思想:将大问题拆成小问题逐一解决
      2 //折半查找法:不断缩小一半查找的范围,知道达到目的,效率较高。  详情见:https://fishc.com.cn/thread-27964-1-1.html
      3 
      4 //折半查找法(迭代)
      5 #include<stdio.h>
      6 
      7 int search(int str[], int n, int key);
      8 
      9 int main(void)
     10 {
     11     int str[11] = {1,1,2,3,5,8,13,21,34,55,89};
     12     int n,adr;
     13     
     14     printf("请输入你需要查找数据的关键字:");
     15     scanf("%d",&n);
     16     printf("\n");
     17     
     18     adr = search(str,11,n);
     19     if(adr != -1)
     20     {
     21         printf("查找成功,关键字%d所在的位置是:%d\n",n,adr);
     22     }
     23     else
     24     {
     25         printf("查找失败!\n");
     26     }
     27     
     28     return 0;
     29 } 
     30 
     31 int search(int str[], int n, int key)
     32 {
     33     int low,high,mid;
     34     
     35     low = 0;
     36     high = n-1;
     37     mid = (low+high)/2;
     38     
     39     while(low <= high)
     40     {
     41         if(key > str[mid])
     42         {
     43             low = mid+1;
     44             mid = (low+high)/2;
     45         }
     46         if(key < str[mid])
     47         {
     48             high = mid-1;
     49             mid = (low+high)/2;
     50         }
     51         if(key == str[mid])
     52         {
     53             return mid;
     54         }
     55     }
     56     
     57     return -1;
     58 }
     59 
     60 //折半查找法(递归算法)
     61 #include<stdio.h>
     62 
     63 int search(int str[], int low, int high, int key);
     64 
     65 int main(void)
     66 {
     67     int str[11] = {1,1,2,3,5,8,13,21,34,55,89};
     68     int n,addr;
     69     
     70     printf("请输入想要查找的关键字:");
     71     scanf("%d",&n); 
     72     
     73     addr = search(str,0,10,n);  //0是low 10是high 
     74     if(addr == -1)
     75     printf("查找失败!\n");
     76     else
     77     printf("可喜可贺,可口可乐,你查找的关键字 %d 在位置 %d ",n,addr);
     78     
     79     return 0;
     80 } 
     81 
     82 int search(int str[], int low, int high, int key)
     83 {
     84     int mid;
     85     if(low <= high)
     86     {
     87         mid = (low+high)/2;
     88         if(str[mid] == key)
     89         return mid;
     90         else
     91         {
     92             if(key > str[mid])
     93             search(str,mid+1,high,key);
     94             else
     95             search(str,low,mid-1,key);
     96         }
     97     }
     98     else
     99     return -1;
    100 }
  • 相关阅读:
    Linux之20——sudo命令
    Linux之18——Linux下安装MySQL及远程连接MySQL
    Linux之17——Git安装及使用以及连接GitHub方法详解
    Linux之16——free性能调优命令
    Linux之15——nc命令详解
    Linux之14——curl命令详解
    Linux之13——常用统计命令之wc
    15 Python 迭代器和生成器
    16 Python 递归函数
    17 python 内置函数
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12491481.html
Copyright © 2011-2022 走看看