给定n个数,要求比较次数1.5n同时找出最大值和最小值
来源:互联网 发布:雨伞 淘宝 编辑:程序博客网 时间:2024/05/21 18:31
http://www.tuicool.com/articles/Ejmmqy6
写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数.
设计出一个算法,只需要执行1.5n次比较就能找到序列中最大和最小的数吗?能否再少?
分析:要求比较次数为1.5n,使用一般的逐个遍历每个元素然后判断其是否为最大最小值是需要2n次的比较的,所以这样的方法是行不通的。现在考虑采用,每次从数组中取出两个元素,判断其大小,然后再分别判断其是否是最大或最小值,这样一次处理两个元素,每一次比较3次,最终的比较次数就是n/2*3=1.5n。C语言代码如下:
#include <stdio.h>#defineMIN-1#define MAX65535void 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.\n", max); printf("The min number is: %d.\n", min); printf("Compare number is: %d.\n", count);}int main(){ int num[10] = {2, 4, 5, 6, 8, 3, 7, 1, 9, 10}; find_max_min(num, 10); return 0;}
程序运行结果截图:
0 0
- 给定n个数,要求比较次数1.5n同时找出最大值和最小值
- 笔试题&面试题:给定n个数,要求比较次数1.5n同时找出最大值和最小值
- 同时找出数组的最大值和最小值,要求时间复杂度为o(n)
- 求一个数组中的最大值和最小值,要求将比较次数减小至3N/2
- 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。
- 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。
- 70-给出n个数,找出这n个数的最大值,最小值,和。
- 给出n个数,找出这n个数的最大值,最小值,以及这些数字的和
- 给出n个数,找出这n个数的最大值,最小值,和。
- n个数求最大值和最小值
- 求n个数中最大值和最小值
- 求n个数的最大值和最小值
- 同时找出最小值和最大值
- 同时找出最大值和最小值
- 利用递归实现n个数中的最大值 和最小值
- 【算法导论】同时找出最大值和最小值
- 同时找出数组的最大值和最小值
- n个数中取最大值与最小值
- Robust Visual Tracking via Convolutional Networks 阅读笔记
- swift 代码笔记3
- Leetcode|Sliding Window Maximum(multiset,优先队列,双端队列和区间树的应用)
- leetcode_Maximum Subarray _medium(最大子数组的和)
- LeetCode || Valid Anagram
- 给定n个数,要求比较次数1.5n同时找出最大值和最小值
- ActionScript 3.0 学习(十) AS3 模拟转盘抽奖小程序
- glCleatDepth
- 华为2016校招机试题
- Eclipse集成javah
- 黑马程序员——CSS
- C++11 auto和decltype推导规则
- Mysql字符转义
- 乱七八糟记事本