zoukankan      html  css  js  c++  java
  • 笔试题&面试题:给定n个数,要求比較次数1.5n同一时候找出最大值和最小值

    写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数.
    设计出一个算法,仅仅须要运行1.5n次比較就能找到序列中最大和最小的数吗?是否能再少?

    分析:要求比較次数为1.5n,使用一般的逐个遍历每一个元素然后推断其是否为最大最小值是须要2n次的比較的,所以这个方案是行不通的。

    如今考虑採用,每次从数组中取出两个元素。推断其大小。然后再分别推断其是否是最大或最小值,这样一次处理两个元素。每一次比較3次,终于的比較次数就是n/2*3=1.5n。

    C语言代码例如以下:

    #include <stdio.h>
    
    #define	MIN	-1
    #define MAX	65535
    
    void find_max_min(int num[], int len)
    {
    	int i, j;
    	int max = MIN;
    	int min = MAX;
    	int tmax, tmin;
    	int count = 0; /*用来统计比較次数*/
    
    	i = 0;
    	j = len - 1;
    	while(i <= j)
    	{
    		if(num[i] < num[j])
    		{
    			tmax = num[j];
    			tmin = num[i];
    			count ++;
    		}
    		else
    		{
    			tmax = num[i];
    			tmin = num[j];
    			count ++;
    		}
    
    		if(min > tmin)
    			min = tmin;
    		if(max < tmax)
    			max = tmax;
    		count += 2; /*上面的两次比較*/
    		i ++;
    		j --;
    	}
    	printf("The max number is: %d.
    ", max);
    	printf("The min number is: %d.
    ", min);
    	printf("Compare number is: %d.
    ", count);
    }
    
    int main()
    {
    	int num[10] = {2, 4, 5, 6, 8, 3, 7, 1, 9, 10};
    	find_max_min(num, 10);
    
    	return 0;
    }
    程序执行结果截图:



  • 相关阅读:
    Pycharm创建Django项目示例
    Window下MyCat的下载与安装
    Python中使用xlrd、xlwt、xlutils读写Excel文件
    循环队列(Java实现)
    oracle 创建表
    win10 删除文件卡在99%
    python xx005文件操作
    python xx004集合
    python xx003字典
    不理解
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7090069.html
Copyright © 2011-2022 走看看