• 写几个函数: ①输人10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。


    15、写几个函数:

    ①输人10个职工的姓名和职工号;
    ②按职工号由小到大顺序排序,姓名顺序也随之调整;
    ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。

    题目解析:

    利用二分查找的关键在于数据一定要先有序,所以在查找前我们需要对数据进行排序。

    代码示例:

    #include<stdio.h>
    
    #define N 10
    
    void input(int num[], char name[N][8])
    {
    	int i;
    	for (i = 0; i < N; i++)
    	{
    		printf("input NO.: ");
    		scanf("%d", &num[i]);
    		printf("input name: ");
    		getchar();
    		gets(name[i]);
    	}
    }
    
    void sort(int num[], char name[N][8])
    {
    	int i, j, min, templ;
    	char temp2[8];
    	for (i = 0; i < N - 1; i++)
    	{
    		min = i;
    		for (j = i; j<N; j++)
    		if (num[min]>num[j])  min = j;
    		templ = num[i];
    		strcpy(temp2, name[i]);
    		num[i] = num[min];
    		strcpy(name[i], name[min]);
    		num[min] = templ;
    		strcpy(name[min], temp2);
    	}
    	printf("
     result:
    ");
    	for (i = 0; i < N; i++)
    		printf("
     %5d%10s", num[i], name[i]);
    }
    
    void search(int n, int num[], char name[N][8])
    {
    	int top, bott, mid, loca, sign;
    	top = 0;
    	bott = N - 1;
    	loca = 0;
    	sign = 1;
    	if ((n<num[0]) || (n>num[N - 1]))
    		loca = -1;
    	while ((sign == 1) && (top <= bott))
    	{
    		mid = (bott + top) / 2;
    		if (n == num[mid])
    		{
    			loca = mid;
    			printf("NO. %d , his name is %s.
    ", n, name[loca]);
    			sign = -1;
    		}
    		else if (n < num[mid])
    			bott = mid - 1;
    		else
    			top = mid + 1;
    	}
    	if (sign == 1 || loca == -1)
    		printf("%d not been found.
    ", n);
    }
    
    int main()
    {
    	int num[N], number, flag = 1, c;
    	char name[N][8];
    
    	input(num, name);
    	sort(num, name);
    
    	while (flag == 1)
    	{
    		printf("
    input number to look for:");
    		scanf("%d", &number);
    		search(number, num, name);
    		printf("continue ot not(Y/N)?");
    		getchar();
    		c = getchar();
    		if (c == 'N' || c == 'n')
    			flag = 0;
    	}
    	return 0;
    }
    

    运行结果:

    写几个函数:  ①输人10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整;

    ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。

  • 相关阅读:
    移动函数的封装示例
    如何从不均衡类中进行机器学习
    DPM(Deformable Parts Model)--原理(一)
    K-means聚类算法
    机器学习中对核函数的理解
    总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)
    技术干货
    神经网络入门
    目标函数、损失函数、代价函数
    地铁客流检测训练问题记录
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13225352.html
Copyright © 2020-2023  润新知