写几个函数:
① 输入10个职工的姓名和职工号;
② 按职工号由小到大顺序排序,姓名顺序也随之调整;
③ 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名
1.程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main()
{
void sort(int xuhao[], char name[][10]);
void search(int xuehao[], char name[][10], int index);
int xuhao[10], i, index;
char name[10][10];
for (i = 0; i < 10; i++)
{
printf("input No.%d xuhao:", i + 1);
scanf("%d", &xuhao[i]);
printf("input No.%d name:", i + 1);
scanf("%s", name[i]);
}
sort(xuhao, name);
printf("请输入你要查找的工号:");
scanf("%d", &index);
search(xuhao, name, index);
}
void sort(int xuhao[], char name[][10])
{
int i, j, temp_xuhao;
char temp_name[20];
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9 - i; j++)
{
if (xuhao[j] > xuhao[j + 1])
{
temp_xuhao = xuhao[j];
xuhao[j] = xuhao[j + 1];
xuhao[j + 1] = temp_xuhao;
strcpy(temp_name, name[j]);
strcpy(name[j], name[j + 1]);
strcpy(name[j + 1], temp_name);
}
}
}
for (i = 0; i < 10; i++)
{
printf("序号:%d\t姓名:%s\n", xuhao[i], name[i]);
}
}
void search(int xuehao[], char name[][10], int index)
{
int left = 0, right = 9, mid = (left + right) / 2;
while (left <= right)
{
if (index > xuehao[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else if (index < xuehao[mid])
{
right = mid - 1;
mid = (left + right) / 2;
}
else if (index == xuehao[mid])
{
printf("%s", name[mid]);
break;
}
}
if (left > right)
{
printf("查无此数");
}
}
2.输入:
3
li
1
zhang
27
yang
7
qian
8
sun
12
jiang
6
zhao
23
shen
2
wang
26
han
3.输出:
input No.1 xuhao:3
input No.1 name:li
input No.2 xuhao:1
input No.2 name:zhang
input No.3 xuhao:27
input No.3 name:yang
input No.4 xuhao:7
input No.4 name:qian
input No.5 xuhao:8
input No.5 name:sun
input No.6 xuhao:12
input No.6 name:jiang
input No.7 xuhao:6
input No.7 name:zhao
input No.8 xuhao:23
input No.8 name:shen
input No.9 xuhao:2
input No.9 name:wang
input No.10 xuhao:26
input No.10 name:han
序号:1 姓名:zhang
序号:2 姓名:wang
序号:3 姓名:li
序号:6 姓名:zhao
序号:7 姓名:qian
序号:8 姓名:sun
序号:12 姓名:jiang
序号:23 姓名:shen
序号:26 姓名:han
序号:27 姓名:yang
请输入你要查找的工号:27
yang