写几个函数:
1.输入5个职工的姓名和职工号
2.按职工号由小到大进行排序,姓名也随之排序
3.要求输入职工号,用折半查找法进行查找,主函数输入。
#include<stdio.h>
#include<string.h>
void main(){
void input(int num[],char name[][8]);
void Output(char name[][8],int num[]);
void Check(char name[][8],int num[],int key);
int num[5]={1,15,2,16,5};
char name[5][8];
input(num,name);
void Sort1(char name[5][8],int num[]);
void Output1(char name[][8],int num[]);
Output(name,num);
putchar(10);
int i,j,t;
char temp[8];
Sort1(name,num);
Output1(name,num);
Output(name,num);
putchar(10);
int p;
putchar(10);
printf("Please Enter Find No:");
scanf("%d",&p);
putchar(10);
Check(name,num,p);
}
void input(int num[],char name[][8]){
int i,j;
for(i=0;i<5;i++){
printf("Inupt NO.");
scanf("%d",&num[i]);
printf("Inupt Name");
getchar();//用来xiaoqu那个 输入数字结束之后的空格
gets(name[i]);
}
}
void Output(char name[][8],int num[]){
for(int i=0;i<5;i++){
printf("%s ",name[i]);
}
}
void Output1(char name[][8],int num[]){
for(int i=0;i<5;i++){
printf("%d ",num[i]);
}
}
void Sort1(char name[5][8],int num[]){
int i,j,t;
char temp[8];
for(i=0;i<4;i++){
for(j=i+1;j<5;j++){
//从大到小
if(num[j]>num[i]){
t=num[i];
num[i]=num[j];
num[j]=t;
strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
}
}
}
}
void Check(char name[][8],int num[],int key){
int mid,low,high,i,sign=1;
low=0;
high=9;
if(num[low]==key)
{
printf("Key: %d,Postion: %d",key,low+1);
sign=0;
}
else if(num[high]==key){
sign=0;
printf("Key: %d,Postion: %d",key,high+1);
}
else{
while(low<=high){
mid=(low+high)/2;
if(key==num[mid]){
printf("Key: %d,Postion: %d",key,mid+1);
sign=0;
break;
}
else if(key>num[mid]){
low=mid+1;
}
else{
high=mid-1;
}
}
}
if(sign==1){
printf("No Fund!");
}
}