【找数组元素最大值的十四种方法】for【练习知识点和总结】

以下是心血成果,版权所有,未经允许,不得转载。作者:李金涛;FROM:光环国际 AT:201712172024.(方便以后,再次修改)

<script>

//   比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,下面来介绍如下十四种方法,原理代码如下:
//    1,排序取值:sort比较器排序(常用),以及冒泡排序(不常用,但方法思想很重要);//    2,假设比较取大值:假设max=arr[0];index=0; 在循环往后比较,如果有比max大的数就让max记录下大的数,索引赋给index,循环做完,即得到满足条件的max与index;(if 判断大了赋新值,小了不管)//    3,冒泡排序思想,内外循环取大值:冒泡排序思想,内外循环,三目比较取大值,返回对比,匹配的可得对应索引;//    4,排除法:后两个比较,较小的扔出去,否则交换,while循环结束,剩下的一个就是最大值,最后返回对比,匹配的可得对应索引;//    5,比较排序法:遍历前后比,if前者大就交换,遍历完就是小大排序,接收最后一个。//    6,删除法:相互比,删除小的,剩下的就是最大的;/*    7, 使用 stream: 将一个数组放进 stream 里面,然后直接调用 stream 里的 min 或 max 函数得到最大值或最小值。

8, 使用 collection: 将数组转化为对象数组,即 int 转化为 Integer (需要使用 toObject 转换)。 然后调用 Collection 里面的 min或max.

9,采用的递归思路是:若求长度为L的数组最大值,即是求 数组前L-1个长度的最大值 和最后一个数组元素的相对较大值.        递归的精髓在于不断的调用自身,从后往前处理数据计算得出结果。求数组最大值也是从后往前比较,回溯求最值。

10, 利用二分查找法递归寻找数组中的最大值。    11,12,13,14,函数方法,详见最后代码;   */    var arr1=[12,3,4,56,7,7];    function f1() {//sort比较器排序        var arr=[12,3,4,56,7,7];        arr.sort(com);        for(var i in arr1){            if(arr[arr.length-1]==arr1[i]){                var index=i;            }        }        txt1.value="max:"+arr[arr.length-1]+",index:"+index;    }    function com(a,b) {        return a-b;    }    //二,假设比较思想:假设max=arr[0];index=0; 在循环往后比较,如果有比max大的数就让max记录下大的数,索引赋给index,循环做完,即得到满足条件的max与index;(if 判断大了赋新值,小了不管)    function f2() {        var arr=[12,3,4,56,7,7];        var max=arr[0];        var index=0;        for(var i=1;i<arr.length;i++){            if(max<arr[i]){                max=arr[i];                index=i;            }        }        txt2.value="max:"+max+",index:"+index;    }

//3,冒泡排序思想,内外循环,三目比较取大值,返回对比,匹配的可得对应索引;    function f3(){        var arr=[12,3,4,56,7,7];        for(var i=1;i<arr.length-1;i++){//两两比较取大值            for(var j=i;j<arr.length-1;j++){                var max=arr[i-1]>arr[j]?arr[i-1]:arr[j];            }        }        for(var k in arr1){            if(max==arr1[k]){                var index=k;            }        }        txt3.value="max:"+max+",index:"+index;    }

//二,冒泡排序(两两比较)思想:1,排序取大值及索引;    // 2,后两个比较,较小的扔出去,否则交换,while循环结束,剩下的一个就是最大值,最后返回对比,匹配的可得对应索引;    function f4() {        var arr=[12,3,4,56,7,7];        while (arr.length>1){            if(arr[arr.length-1]<=arr[arr.length-2]){                arr.pop();            }else {                arr[arr.length-2]=arr[arr.length-1];                var temp=arr[arr.length-2];                arr[arr.length-1]=temp;                arr.pop();            }        }//        console.log(arr);        var arr1=[12,3,4,56,7,7];        var max=arr[0];        var index=getMax_index(arr1,max);//封装方法:返回对比,匹配的可得对应索引;方法在后边。        txt4.value="max:"+arr[0]+",index:"+index;

}    //遍历前后比,if前者大就交换,遍历完就是小大排序,接收最后一个。    function f5() {        var arr=[12,3,4,56,7,7];        var arr1=[12,3,4,56,7,7];        for(var i=0;i<arr.length-1;i++ ){            if(arr[i]>arr[i+1]){                var temp=arr[i+1];                arr[i+1]=arr[i];                arr[i]=temp;            }        }        var max=arr.pop();        var index=getMax_index(arr1,max);        txt5.value="max:"+max+",index:"+index;    }

//相互比,删除小的,剩下的就是最大的;    function f6() {        var arr=[12,3,4,56,7,7];        var arr1=[12,3,4,56,7,7];        while(arr.length>1){//相互比,删除小的            for(var j=0;j<arr.length-1;j++){                if(arr[j]<=arr[j+1]){                    arr.splice(j,1);                }else {                    arr.splice(j+1,1);                }            }        }        var max=arr[0];        var index=getMax_index(arr1,max);        txt6.value="max:"+max+",index:"+index;    }    function getMax_index(arr,max) {        for(var k in arr){            if(max==arr[k]){                var index=k;            }        }        return index;    }
/*   其他方法:

方法十一:    //最小值    Array.prototype.min = function() {        var min = this[0];        var len = this.length;        for (var i = 1; i < len; i++){            if (this[i] < min){                min = this[i];            }        }        return min;    }    //最大值    Array.prototype.max = function() {        var max = this[0];        var len = this.length;        for (var i = 1; i < len; i++){            if (this[i] > max) {                max = this[i];            }        }        return max;    }    如果你是引入类库进行开发,害怕类库也实现了同名的原型方法,可以在生成函数之前进行重名判断:

if (typeof Array.prototype[‘max‘] == ‘undefined‘) {        Array.prototype.max = function() {        ... ...        }    }

方法十二:

用Math.max和Math.min方法可以迅速得到结果。apply能让一个方法指定调用对象与传入参数,并且传入参数是以数组形式组织的。恰恰现在有一个方法叫Math.max,调用对象为Math,与多个参数

Array.max = function( array ){        return Math.max.apply( Math, array );    };    Array.min = function( array ){        return Math.min.apply( Math, array );    };    但是,John Resig是把它们做成Math对象的静态方法,不能使用大神最爱用的链式调用了。但这方法还能更精简一些,不要忘记,Math对象也是一个对象,我们用对象的字面量来写,又可以省几个比特了。

Array.prototype.max = function(){        return Math.max.apply({},this)    }    Array.prototype.min = function(){        return Math.min.apply({},this)    }        [1,2,3].max()// => 3        [1,2,3].min()// => 1

方法十三:

function getMaximin(arr,maximin)    {        if(maximin=="max")        {            return Math.max.apply(Math,arr);        }        else if(maximin=="min")        {            return Math.min.apply(Math, arr);        }    }    var a=[3,2,4,2,10];    var b=[12,4,45,786,9,78];    console.log(getMaximin(a,"max"));//10    console.log(getMaximin(b,"min"));//04    方法十四:

var a=[1,2,3,5];    alert(Math.max.apply(null, a));//最大值    alert(Math.min.apply(null, a));//最小值    多维数组可以这么修改:

var a=[1,2,3,[5,6],[1,4,8]];    var ta=a.join(",").split(",");//转化为一维数组    alert(Math.max.apply(null,ta));//最大值    alert(Math.min.apply(null,ta));//最小值*/

</script>
<body><p>var arr=[12,3,4,56,7,7]    输出中数组中最大的数及索引:多种方式实现</p><input type="button" value="方法一" onclick="f1()"/><input type="text" id="txt1"/><br/><input type="button" value="方法二" onclick="f2()"/><input type="text" id="txt2"/><br/><input type="button" value="方法三" onclick="f3()"/><input type="text" id="txt3"/><br/><input type="button" value="方法四" onclick="f4()"/><input type="text" id="txt4"/><br/><input type="button" value="方法五" onclick="f5()"/><input type="text" id="txt5"/><br/><input type="button" value="方法六" onclick="f6()"/><input type="text" id="txt6"/><br/><input type="button" value="方法七" onclick="f7()"/><input type="text" id="txt7"/><br/><input type="button" value="方法八" onclick="f8()"/><input type="text" id="txt8"/><br/></body>
时间: 2024-11-29 01:40:35

【找数组元素最大值的十四种方法】for【练习知识点和总结】的相关文章

PHP从数组中删除元素的四种方法实例

本篇文章主要介绍了PHP从数组中删除元素的四种方法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 茴香豆的"茴"字有四种写法,PHP从数组中删除元素也有四种方法 ^_^. 删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b", 2 => "c"); unset($array[

JavaScript数组去重的四种方法

今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重    Array.prototype.unique1 = function(){                var temp = [];        for(var i=0; i < this.length; i++){            if(temp.indexOf(this[i]) == -1){                tem

OC-数组遍历的四种方法

数组遍历的四种用法 例:NSArray *array = @[@1,@2,@3,@4]; 第一种方法--for循环 for(int i=0;i<array.count;i++){ NSLog( @"%@",array[i] ); } 第二种方法--for循环增强版 //常用的是 for(NSString *str in array){ NSLog(@"%@",str); } //万能的是 for(id obj in array){ NSLog(@"%

js数组去重的四种方法

//第一种方法 Array.prototype.removeDuplicate = function() { var n = []; for (var i = 0; i < this.length; i++) { if (n.indexOf(this[i]) == -1) { n.push(this[i]); } } return n; } var arr = [1, 2, 3, 3, 2, '我', '我', 34, '我', NaN, NaN]; var m1 = arr.removeDup

[JAVA]十四种Java开发工具点评

作者:兄弟连 在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4

清除浮动——让包围元素包含浮动元素的四种方法

什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动. 有一段代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta

JS 中检测数组的四种方法

今天和大家分享一下 JS 中检测是不是数组的四种方法,虽然篇幅不长,不过方法应该算是比较全面了. 1. instanceof 方法 instanceof 用于检测一个对象是不是某个类的实例,数组也是一种对象所以也可以利用 instaceof 来进行判断. let arr = [1, 2, 3]; console.log(arr.instanceof(Array)); // true 这种方法在只有一个全局作用域的环境下是可以的,但是如果一个网页中包含多个框架,那么就会存在不同的全局环境,不同的环

Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac

使用Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac