字符串冒泡排序和折半查找

输入 10个员工工号和姓名,以工号增加方式排序(姓名跟随改变),按工号查找(同时找出姓名)

代码如下:

 1 # include<stdio.h>
 2 # include<string.h>
 3 char num[10][7];
 4 char name[10][10];
 5 char temp[10];
 6 char num1[7];
 7 int main()
 8 {
 9     void sort(char[][7],char[][10]);
10     void search(char[][7],char[][10],char[]);
11     for(int i=0;i<10;i++)
12     {
13         gets(num[i]);
14         gets(name[i]);
15     }
16     sort(num,name);
17     for(i=0;i<10;i++)
18     {
19         printf("%s:%s\n",num[i],name[i]);
20     }
21     printf("输入要查找的工号:");
22     gets(num1);
23     search(num,name,num1);
24     return 0;
25 }
26 
27 void sort(char a[][7],char b[][10])
28 {
29     for(int i=0;i<9;i++)
30     {
31         int sign=0;
32         for(int j=9;j>i;j--)
33         {
34             if(strcmp(a[j],a[j-1])<0)
35             {
36                 sign=1;
37                 strcpy(temp,a[j]);
38                 strcpy(a[j],a[j-1]);
39                 strcpy(a[j-1],temp);
40                 strcpy(temp,b[j]);
41                 strcpy(b[j],b[j-1]);
42                 strcpy(b[j-1],temp);
43             }
44         }
45         if(sign==0) break;
46     }
47 }
48 void search(char a[][7],char b[][10],char c[])
49 {
50     int f=0,r=9,mid;
51     while(f<=r)
52     {
53         mid=(f+r)/2;
54         if(strcmp(a[mid],c)==0)
55         {
56             printf("%s:%s\n",a[mid],b[mid]);
57             return;
58         }
59         else if(strcmp(a[mid],c)<0) r=mid-1;
60         else f=mid+1;
61     }
62     printf("未找到\n");
63 }

运行结果:

猜你喜欢

转载自www.cnblogs.com/bboykaku/p/12450788.html