现在的位置: 首页 > 综合 > 正文

排序与查找

2014年05月30日 ⁄ 综合 ⁄ 共 1713字 ⁄ 字号 评论关闭
文章目录

问题 P : C语言8.27

时间限制:1 秒
内存限制:32 兆
特殊判题:
提交:0
解决: 0

题目描述

用函数分别实现下列的功能:

(1)     输入10个职工的姓名和职工号;

(2)     按照职工号由小到大的顺序排序,注意需要随之调整姓名顺序;

(3)     输入一个职工号,用折半查找法找出该职工的姓名,要求通过主函数输入要查找的职工号,同时从主函数输出该职工的姓名。

输入格式

共有11行。
前10行中的每一行包含了一个职工的姓名和职工号。姓名是一个不包含空格且长度不超过20的字符串,职工号是一个不小于0且不大于1000的整数。
最后一行包含一个职工号,表示需要查找姓名的职工。保证需要查找的职工号一定出现在已经输入的10个职工信息中。

输出

共有11行。
前10行每一行输出按照职工号从小到大排序后的职工信息,包括姓名和职工号,用一个空格隔开。
最后一行输出查找到的职工姓名。
请注意行尾输出换行。

样例输入

Zhao 10
Qian 23
Sun 9
Li 0
Zhou 88
Wu 43
Zheng 20
Wang 19
Jiang 26
Dai 79
20

样例输出

Li 0
Sun 9
Zhao 10
Wang 19
Zheng 20
Qian 23
Jiang 26
Wu 43
Dai 79
Zhou 88
Zheng

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

提示[-]

#include<stdio.h>
#define N 10
#include<string.h>
void input(int num[N],char name[N][21])//?
{
 int i;
 for(i=0;i<N;i++)
 {
  printf("\nInput NO&name:");
  scanf("%d",&num[i]);
  getchar();
  gets(name[i]);
  
 }
}
void output(int num[N],char name[N][21])
{
 int i;
 printf("\nresult:\n");
 for(i=0;i<N;i++)
 printf("\n%5d%10s",num[i],name[i]);
}
void sort(int num[N],char name[N][21])
{
 int i,j,min,t;
 char temp[21];
 for(i=0;i<N-1;i++)
 {min=i;
 for(j=1+i;j<N;j++)
 if(num[min]>num[j])
 min=j;
 if(min!=i)
 {
  t=num[i];
  num[i]=num[min];
  num[min]=t;
  strcpy(temp,name[i]);
  strcpy(name[i],name[min]);
  strcpy(name[min],temp);
  
 } }
 
}
void search(int n,int num[N],char name[N][21])
{
 int top=0,bott=N-1,mid,flag=1;
 while(flag&&top<=bott)
 {
  mid=(bott+top)/2;
  if(n==num[mid])
  {
   printf("NO.%d,His name is%s.\n",n,name[mid]);
   flag=0;
  }
  else if(n<num[mid])
  bott=mid-1;
  else top=mid+1;
  
 }
 if(flag)
 printf("can't find %d.\n",n);
}
int main()
{
 int num[N],number,c,n;
 char name[N][21];
 input(num,name);
 sort(num,name);
 output(num,name);
 do
 {
  printf("\nInput number to look for:");
  scanf("%d",&number);
  search(number,num,name);
  printf("Continue or not?(Y/N)?");
  getchar();
  c=getchar();
  
 }
 while(c=='y'||c=='Y');
}

【上篇】
【下篇】

抱歉!评论已关闭.