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

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

  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/inta/p/13362513.html
Copyright © 2011-2022 走看看