找出最大值和最小值的时间复杂度比较小的一种方法

       一般认为,对于给定的n个数,只要独立地找出最小值和最大值,各用n-1次比较,最多2(n-1)次就可以找出最大值和最小值。

       实际上,至多3(n/2)次比较就足以同时找到最大值和最小值,具体做法是:成对的处理元素,先将一对元素互相比较,然后将最小者与当前最小值比较,将较大者与当前最大值比较,因此每两个元素需要3次比较。这里要注意n的奇偶,当n是奇数,就将最小值和最大值都设置为第一个元素,然后成对的处理剩下的元素;如果n是偶数,就对前两个元素做一次比较,以决定最大值和最小值,然后成对地处理余下的元素。

时间: 2024-10-30 08:58:58

找出最大值和最小值的时间复杂度比较小的一种方法的相关文章

C语言 不使用if判断求出最大值和最小值

作者 : 卿笃军 上次老师问我们,如果我给你两个整数,你们如何输出其中的较大数,或者较小数呢? 当然,一个if就搞定了,但是如果不能让你们用if判断,你还能找出来吗? 答案是当然的. 首先分析一下,加入给了我们2个数,分别是:5 和 2,这要如何找出来呢? 5 - 2 = 3  ,说明两数相差为3,我们可以从这里入手. 5 + 2 + 3 = 10 . 这不就是5的两倍吗? 5 + 2 - 3 = 4 .这是2的两倍. 哦,下面C语言实现一下: #include <stdio.h> #incl

在一个SQL Server表中的多个列找出最大值

在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..##TestTable') IS NOT NULL) DROP TABLE ##TestTable CREATE TABLE ##TestTable ( ID INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(40), UpdateByApp1Date DATE

【C++】输入8个数,求出最大值与最小值

//输入8个数,求出最大值与最小值 #include <iostream> using namespace std; int max(int b[],int n),min(int b[],int n); int main() { int a[8]; cout<<"输入8个int型数 :"; for(int i=0;i<8;i++) cin>>a[i]; cout<<"最大数为 "<<max(a,8)&

输入三个整数,找出最大值

/* ============================================================================ Name : max.c Author : duanqibo Version : Copyright : Your copyright notice Description : 输入三个整数,找出最大值 ====================================================================

在List中找出最大值的两种方法

先说需求:找出一个对象List中,某个属性值最大的对象. 1.定义对象 1 private class A 2 { 3 public int ID { get; set; } 4 5 public string Name { get; set; } 6 } 2.为两种方法定义两个时间段全局变量. 1 private static TimeSpan compare = new TimeSpan(); 2 private static TimeSpan order = new TimeSpan();

【算法】求二叉树各路径结点之和并找出最大值的路径

说在前面的话 最近没事将大学里的<数据结构>(严蔚敏,吴伟民著)一书重拾温习,受益颇多,才发现工作之中诸多经验问题都找到了理论支撑. 当时觉得没用的书,现在只能嘲笑当时得多low... 现在依然很low... --! 事件背景 因实际工作中,遇到一个关于权重的问题,需要将数据关系中最大权重的路径找到,然后就想到了<数据结构>中的DFS... 此事勾起了我码砖的激情,让我本已平静的心再次荡漾... 为了简单说明这个问题,我就拿个二叉树的模型来叙述一下我要达成的目标 CASE Exam

Windows7中如何快速找出文件被谁占用【技术小摘】

Windows7下如何删除正在被占用的文件? Windows7下怎么知道一个文件被谁占用? 我怎么查到一个注册表键值被谁占着不让我改? 请先不要着急给我推荐第三方软件,Windows7的新地盘里面我能自己做主了,我们往下看—— 当删除文件或文件夹,特别是 Temp 临时文件夹时,可能遇到下列错误信息[文件正在使用]或是[操作无法完成,因为文件已在 XXX 中打开]. ( 请注意:XXX 代表其开启的程序.) 要成功删除这些文件,首先要找出哪些进程调用了它们,然后将相关应用程序关闭.相较于以前的操

shell &nbsp; 随机生成10个数,找出最大值

分析:随机生成10个数?  生成随机数,这里用RANDOM函数,我把生成的这10个数定义为一个数组array,定义MAX的初始值为array[0] 使用for循环进行与每一个元素的值进行比较,如果有比array[0]大的,假如array[3]比array[0]大,那么就把array[3]的值赋值给MAX,遍历比较每个数组元素,最后输出MAX的值即可! 看看执行情况....                      文本 #!/bin/bash #Author:wangergui       Em

使用Java语言实现,自动生成10个整数(1~100,求出生成数列中的最大值和最小值,不允许使用Arrays类的sort方法

这是考察基本的java基础,没啥难点,直接上代码,最近在准备面试,所以做一些基础的面试题练练手 public class Demo1 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<100;i++){ int num = (int) (Math.random()*100)+1; if(!list.contains(nu