利用二分法和自定义函数做题
1.输入员工的名字和编号
2.将员工按编号进行排序,姓名也要显示
3.只用输入编号,就能查询该员工
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
void input(int num[10], char name[10][10]);
void swap(int num[10], char name[10][10]);
void search(int n, int num[10], char name[10][10]);
int num[10],n,c;
int flag = 1; //循环终止的条件
char name[10][10];
input(num, name);
swap(num, name);
while (flag == 1)
{
printf("请输入要查找人的编号:");
scanf_s("%d", &n);
search(n, num, name);
printf("请问是否要继续,输入Y\N:");
getchar();
c= getchar();
if (c == 'N'||c=='n')
flag = 0;
}
system("pause");
return 0;
}
void input(int num[10], char name[10][10])
{
int i;
for (i = 0; i < 10; i++)
{
printf("编号为:");
scanf_s("%d", &num[i]);
printf("名字为:");
getchar();
gets_s(name[i]);
} //这里的输入就可以将一个人的姓名和编号连在一起
}
void swap(int num[10], char name[10][10])
{
int i, j, t1, k;
char c[10];
for (i = 0; i < 9; i++)
{
k = i;
for (j = i + 1; j < 10; j++)
if (num[k] > num[j])
k = j;
t1 = num[k]; num[k] = num[i]; num[i] = t1;
strcmp(c, name[k]); strcmp(name[k], name[i]); strcmp(name[i], c);
}
for (i = 0; i < 10; i++)
{
printf("编号为:%d",num[i]);
printf("名字为:%s",name[i]);
}
}
//二分法
void search(int n, int num[10], char name[10][10])
{
int mid;
int top = 0;
int bottom = 9,p = 0,q=1;
if(n<num[0]||n>num[9])
{
p = -1;
}
while (q == 1 && bottom > top)
{
mid = (top + bottom)/2;
if(num[mid]==n)
{
printf("编号:%d名字:%s", n, name[mid]);
q = -1;
}
else if (n < num[mid])
{
bottom = bottom - 1;
}
else
{
top = top + 1;
}
}
if (p == -1 || q == -1)
{
printf("输入的数据有误");
}
}