c++顺序排放,折半查找法找员工

实验内容: 编写几个函数:
1.输入10个职工的姓名和职工号;
2.按照职工号由小到大的顺序排序,姓名顺序也随之调整;
3. 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
本实验运行环境:Microsoft Visual c++ 2010学习版。

代码:

#include <stdio.h>

#include <string.h>

int main() //定义主函数

{

void input_num_name(double num[], char name[][16], int n);

void sort_num_name(double num[], char name[][16], int n); 

void seek_num_name(double num[], char name[][16], int n, int seek_num); 

double num[100],seek_num;

int i,j,n; //定义变量i,j,k

char name[100][16];

printf("您公司有多少位员工:");

scanf("%d", &n);

input_num_name(num, name, n);

sort_num_name(num, name, n);

printf("请输入您要查找的员工工号:");

scanf("%lf", &seek_num);

seek_num_name(num, name, n, seek_num);

return 0; //返回函数值为0

}

 

void input_num_name(double num[], char name[][16], int n)

{

   int i,j;

   for(i=0;i<n;i++)

  {

    printf("请您输入第%d位员工的工号和姓名,空格隔开:\n",i+1);

    scanf("%lf", &num[i]);

    gets(name[i]);

}

   printf("您的所有员工信息如下:\n");

   for(i=0;i<n;i++)

 {

   printf("工号:%lf 姓名:%s\n", num[i], name[i]);

 }

 

void sort_num_name(double num[], char name[][16], int n)

{

 printf("按工号由小到大排序如下:\n");

 int i,j; //定义变量

 double temp_num;

 char temp_name[16];

 for(i=0;i<n;i++)

 {

   for(j=0;j<n-i-1;j++)

  {

     if(num[j]>num[j+1])

   {

    temp_num = num[j];

    num[j] = num[j+1];

    num[j+1] = temp_num;

    strcpy(temp_name,name[j]);

    strcpy(name[j],name[j+1]);

    strcpy(name[j+1],temp_name);

   }

  }

 }

 for(i=0;i<n;i++){

  printf("工号:%lf 姓名:%s\n", num[i], name[i]);

 } 

 

 

void seek_num_name(double num[], char name[][16], int n, int seek_num)

{

 int low = 0;

 int high = n-1;

 int mid;

 int i=1;

 while(low<high)

 {

   mid = (high+low)/2;

   if(num[mid]==seek_num)

   {

     printf("您要查找的员工信息如下:\n工号:%lf 姓名:%s", num[mid], name[mid]);

     i = 0;

     break;

   } 

else if(num[mid]>seek_num)

  {

    high = mid-1;

  }

else

{

   low = mid+1;

  }

 }

 if(i)

 {

printf("本公司暂无此员工!");

 }

}

157ea9650163432ba964d6f5a7c535b3.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值