同时寻找一个数组中的最大元素和最小元素--你会有所收获
来源:互联网 发布:tsql编程入门经典 pdf 编辑:程序博客网 时间:2024/05/16 03:25
给定一个数组a,含有n,寻找这个数组中的最大元素和最小元素,刚看到这个题目的时候,觉得这个问题没什么思考性,因为这个问题很简单,就是设定一个初始最大值和初始最小值,然后循环遍历数组,进行比较,至多会在2(n-1)的时间内找到最大值和最小值。下面给出一种分析的方法,使得这个问题能够在3*(n/2)内结束。首先要判定n是奇数还是偶数,
如果是奇数的话,假设min=max=a[1].然后遍历数组,但是这时候每次取两个数字,并把这两个数字进行比较,将较大的值和max进行比较,较小的值和min进行比较。这样循环 会在(n-1)/2或者(n-2)/2次后结束,这样比较的次数就变为每次循环要比较三次。这个方法对于n值很小的数组来说,没什么太大的影响,但是如果数组的n值很大的话,那时间减少了相当于原来的四分之一。下面给出代码和事例:
#include<stdio.h>void find_min_max(int a[],int n,int *min,int *max){int i;if(n%2==1){*min=a[0];*max=a[0];i=1;}else{if(a[0]>a[1]){*max=a[0];*min=a[1];}else{*max=a[1];*min=a[0];}i=2;}for(;i<n;i+=2){if(a[i]>a[i+1]){if(a[i]>(*max))*max=a[i];if(a[i+1]<(*min))*min=a[i+1];}else{if(a[i+1]>(*max))*max=a[i+1];if(a[i]<(*min))*min=a[i];}}}void main(){int a[]={1,9,6,4,5,22,13,56,45};int min,max;find_min_max(a,sizeof(a)/sizeof(int),&min,&max);printf("%d\t%d\n",min,max);}
- 同时寻找一个数组中的最大元素和最小元素--你会有所收获
- 无序数组同时查找最大和最小的元素
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- 寻找在数组中一个元素是不是该行最小,该列最大的元素
- 寻找一个数组中的最大和最小数
- 寻找一个数组中的主元素
- 查找数组(不限维数)中的最大元素和最小元素
- C++采用递归算法寻找一个整型数组中的最大元素
- 寻找矩阵行最大列最小元素
- 寻找数组中的主要元素
- 寻找数组中的缺失元素
- 寻找数组中的主元素
- 获得一个2n数组中的N个元素,使得该N个元素与剩余元素和最小
- 输入一个数组,最大的元素与第一个元素交换,最小的元素与最后一个元素交换
- 求一个上三角矩阵中每一条斜线中的最大元素(L)和最小元素(S)。
- 查找最大和最小元素
- 16.java语言基础-获取数组最大和最小元素
- 旋转数组中的最小元素
- Web前端研发工程师编程能力飞升之路 (发现自己处于入门)
- .Net中通过反射技术的应用----插件程序的开发入门
- 以C#编写的Socket服务器的Android手机聊天室Demo
- C/C++_对被调函数的声明
- C语言 malloc(0)的问题
- 同时寻找一个数组中的最大元素和最小元素--你会有所收获
- 设置页面背景【鸡蛋】
- 黑马程序员-面试题之交通灯管理系统
- CFS 调度器学习笔记
- MySQL删除一个数据库下所有表
- android servicelifecycle 服务的生命周期和程序内部调用服务
- Stolen Code的一些想法
- C/C++_【递归】求年龄
- rpm命令