• 查找 | 二分查找/折半查找


    //二分查找法
    #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;
    }

  • 相关阅读:
    LeetCode每周记录-3
    leetcode每周记录
    leetcode每周记录
    软件工程课程总结报告
    微信抢票应用开发总结
    C#获取项目程序及运行路径的方
    python opencv 读取USB摄像头的像素问题
    去除激活水印办法
    系统激活成功仍显示水印,取消激活方法
    bytes,bytearray
  • 原文地址:https://www.cnblogs.com/billie52707/p/11904099.html
Copyright © 2020-2023  润新知