zoukankan      html  css  js  c++  java
  • 查找 | 二分查找/折半查找

    //二分查找法
    #include <stdio.h>
    #define MaxSize 8
    typedef struct
    {
      int stuno;
      char stuname[20];
    }TableElem;

    TableElem stu[]={{1001,"zhang"},{1009,"wang"},{2005,"sun"},{2008,"liu"},{3001,"zheng"},
    {3005,"lai"},{4003,"qin"},{4400,"ren"}};

    typedef struct
    {
      TableElem elem[MaxSize];
      int n;
    }SqTable;

    //二分查找函数
    int bin_search(SqTable T,int key)
    {
      int low,high,mid;
      low=1;
      high=T.n;

      while(low<high)
      {
        mid=(low+high)/2;
        if(T.elem[mid].stuno==key)
          return mid;
        else if(key<T.elem[mid].stuno)
          high=mid-1;
        else
          low=mid+1;
      }
      return 1;
    }

    /*
    int searchsqtable(SqTable T,int key) //查找函数
    {
      T.elem[0].stuno=key;
      int i=T.n;
      while(T.elem[i].stuno!=key)
        i--;
      return i;
    }
    */

    //选择排序
    void select_sort(SqTable T,int nn)
    {
      int min,i,j;
      TableElem temp;
      for(i=0;i<nn-1;i++)
      {
        min=i;
        for(j=i+1;j<nn;j++)
        {
          if(T.elem[j].stuno<T.elem[j+1].stuno)
            min=j;
        }
        if(min!=j)
        {
          temp=T.elem[min];
          T.elem[min]=T.elem[i];
          T.elem[i]=temp;
        }
      }
    }
    int main()
    {
      SqTable seq;
      for(int i=0;i<MaxSize;i++)
      {
        seq.elem[i]=stu[i]; //用stu[8]8个人初始化elem[8]数组
      }
      seq.n=MaxSize;

    //8个人按学号排序
      int n=MaxSize;
      select_sort(seq,n);

      for(i=0;i<MaxSize;i++)
        printf("%d %s ",seq.elem[i].stuno,seq.elem[i].stuname);

      int kk,mm;
      printf("请输入要查找的学号:");
      scanf("%d",&kk);
      mm=bin_search(seq,kk); //调用查找函数
      printf("此人在顺序表中的位置是:%d ",mm+1);
      printf("%d号的姓名为:%s ",mm+1,seq.elem[mm].stuname);
      return 1;
    }

  • 相关阅读:
    函数类型和函数对象
    _strdup和strdup还有string.h和string事
    VS包含头文件的路径设置
    (转)C++学习建议
    2.2Python数据处理篇之---math模块的数学函数
    2.1Python数据处理篇之---内建有关数学的函数
    19LaTeX学习系列之---LaTeX的总结
    18LaTeX学习系列之---LaTeX的参考文献
    17LaTeX学习系列之---LaTeX的版面设计
    16LaTeX学习系列之---LaTeX数学公式的补充
  • 原文地址:https://www.cnblogs.com/billie52707/p/11904099.html
Copyright © 2011-2022 走看看