无序数组同时查找最大和最小的元素
来源:互联网 发布:新浪数据库 股票 编辑:程序博客网 时间:2024/05/02 15:28
在无序数组中查找最大或者最小的元素都需要进行n次比较,但是同时查找最大和最小的元素却可以在3n/2次比较内实现。
问题:给定一个长度为n的无序序列,同时查找出这个序列中的最大和最小值。
算法设计:如果只是在无序序列中查找最大或最小值,至少需要n-1次比较,但是同时查找出最大值和最小值却不需要2(n-1)次比较,而只需要3n/2次比较。其策略是:同时保存当前得到的最大值和最小值,之后依次从无序序列中取出两个数并进行比较,其中较小的一个与当前的最小值比较,较大的一个于当前的最大值比较,然后更新当前的最大值和最小值,按照这个过程,每两个元素需要进行3次比较,于是总的比较次数就是3n/2。
为了保证之后的元素有偶数个,设定最大值和最小值的初值时需要结合n的奇偶性,若n为奇数,则最大值和最小值的初值都取第一个元素,若n为偶数,则首先比较序列的前两个元素,较小的一个作为最小值的初值,较大的一个作为最大值的初值。
//x存放无序序列的数组 min最小值 max最大值 n数组长度private static void findMaxAndMin(int[] x,int n){int min;int max;int i;if(n%2 == 0){ //设定初值,n为偶数的情况if(x[0] < x[1]){min = x[0];max = x[1];}else{max = x[0];min = x[1];}i = 2;//已经有两个元素参与过比较}else{ //n为奇数 ,已经有一个元素参与过比较min = x[0];max = x[0];i = 1;}while(i < n){//每次取两个元素递推if(x[i] < x[i+1]){min = (x[i] < min) ? x[i] : min;max = (x[i+1] < max) ? max : x[i+1];}else{min = (x[i+1] > min) ? min : x[i+1];max = (x[i] > max) ? x[i] : max;}i = i + 2; //又有两个元素参与比较}System.out.println("min = "+ min);System.out.println("max = "+ max);return;}
0 0
- 无序数组同时查找最大和最小的元素
- 查找最大和最小元素
- 在一个无序数组中找到第K个最小或者最大的元素
- 数组最大-最小元素的查找算法
- 同时寻找一个数组中的最大元素和最小元素--你会有所收获
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- 同时查找数组中最大和最小值
- 查找数组(不限维数)中的最大元素和最小元素
- 在一个数组中查找最大的K个元素或者最小的K个元素
- 二分法查找(数组元素无序)
- C语言 查找数组中最大最小元素
- 有序数组和无序数组的二分查找
- 求解二维数组的最大/最小元素
- 查找最小的k个元素(数组)
- 无序数组的“折半查找”
- 无序数组的二分查找
- 无序数组的二分查找
- 交换两个长度均为n的无序数组的元素,使两数组元素的和之差的绝对值最小
- Redis 的 Java 客户端开发包 Jedis
- HDOJ——简单题4(1020,1021)
- linux下搭建LNMP(linux+nginx+mysql+php)环境之php5.4安装
- linux 使用 vsftp
- 变形课
- 无序数组同时查找最大和最小的元素
- Ubuntu在线安装eclipse
- 2015_1_27_IO1
- EasyUI使用总结
- HDU 1986 & ZOJ 2989 Encoding(模拟)
- 给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树。
- JQuery.Ajax之错误调试帮助信息
- 邻接表 bfs
- C编译器剖析_2.5 UCC编译器的符号表管理