先看一下两个例子:

十个成绩,求总分,最高分,最低分

    //输入10个成绩,求总分,最高,最低
    var arr=new Array(67,45,56,12,90,98,23,43,56,99,97);
    var g=0;
    var d=arr[0];//定义最小开始时等于第一个数
    var z=0;
    for(var i=0;i<arr.length;i++){
        z=z+arr[i];
        if(arr[i]>g){
            g=arr[i];
        }if(arr[i]<=d){
            d=arr[i];
        }
    }
    alert(z+","+g+","+d);

首先定义出数组,最高分g,最低分d开始时等于数组第一个元素,总分z

然后循环中,首先总分加数组元素

然后判断这个数组元素是否大于最高分,如果是则将这个分数赋给g,如果不是则判断是否小于最低分d,如果是则将此值赋给d

最低分的要点在于开始赋值,如果和总分高分一样初始值为0,则第二个判断中,低分会一直为0,所以要把数组的第一个值赋给d,这样才能判断计算

向数组中添加数据时去重

    var arr=Array(2,1,11,2,31);
    var s=prompt("请输入学号");
    var z=0;
    for(var i=0;i<arr.length;i++){
        if(s==arr[i]){
            z=1;
        }
    }
    if(z==0){
        arr.push(s);
    }else{
        alert("重复");
    }
    alert(arr);

首先定义数组,输入学号的返回值s,变量z

遍历数组中,判断如果输入的值等于数组中的某个数,将z的值变为1,然后在进行判断,如果z为0,说明输入的数组中没有,写入,否则,提示重复

我们还可以直接调用arr.indexOf()方法来进行查找

arr.indexOf()方法:给他一个值,如果这个值在数组中出现,返回这个值得索引,如果不存在,返回 -1

//    2.往数组里面添加数据的时候去重
    var a = parseInt(prompt("请输入一个数字:"));
    var arr = new Array(1,2,3,4,5);

    alert(arr.indexOf(a)); //判断数据是否在数组里面存在

输入值5,返回5的索引4。

需要注意在这里要用 parseInt() 将输入的值转换为整数。

 冒泡排序

将一组无规律的数据按照一定的规律排列下来

冒泡排序的原理:

这是将一组无规律的数据从大到小排列

由此可知冒泡排序的规律:

比较的轮次=数组长度-1

每轮比较的次数=数组长度-轮次

    //冒泡排序
    var arr=new Array(12,32,54,65,45,23,09,67,91);
    var zj=0;
    for(i=1;i<arr.length;i++){
        for(l=0;l<arr.length-i;l++){
            if(arr[l]<arr[l+1]){
                zj=arr[l];
                arr[l]=arr[l+1];
                arr[l+1]=zj;
            }
        }

    }
    alert(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]+","+arr[4]+","+arr[5]+","+arr[6]+","+arr[7]+","+arr[8]);

这里的思路是:

首先定义出数组,在定义一个中间变量zj

然后一个for循环控制比较的轮次,所以这里i从1开始,循环中i<1也就是循环的轮次是数组长度-1,然后里面在嵌套一个for循环控制每一轮比较的次数,这里l=0,l小于数组长度减去i也就是轮数。

当然,以上是运行次数最少的方案,如果不考虑运行效率,可以i,l初始值都为0,并且都小于数组长度,其结果是一样的。

二分法

在数组里查找数据,找到数据所在的索引

//    在数组里面查找数据,找到数据所在位置的索引
    var arr = new Array(1,2,3,4,5,6,7,8,9,10);
    var a = 2;
    //方法一
    alert(arr.indexOf(a));
    //方法二
    for(var i=0;i<arr.length;i++){
        if(a==arr[i]){
            alert(i);
        }
    }
//    二分法查找数据,数组必须是排好序的
    var minx = 0;      //定义最小值
    var maxx = arr.length-1;      //定义最大值
    while(true){      //不确定循环次数,使用while玄幻
        //定义中间值等于最大值和最小值和的一半
        var zjx = parseInt((minx+maxx)/2);
        if(zjx==minx){      //中间值等于最小值的情况下
            if(a==arr[zjx+1]){
                alert(zjx+1);      //如果要查找的数据等于中间值+1,也就是中间值右边得数,输出值,跳出循环
                break;
            }
        }
        if(a==arr[zjx]){
            alert(zjx);      //如果中间值等于要查找的数,输出
            break;
        }else if(a>arr[zjx]){      //如果中间值大于要查找的数
            minx = zjx;      //中间值赋给最小值,然后继续循环
        }else{
            maxx = zjx;      //如果中间值小于要查找的数,中间值赋给最大值,然后继续循环
        }
    }

这三种方法都可以找到数据的索引,这里着重看一下二分法

二分法查找的前提;数组必须为有序

思路:找到数组的中间数zjx和要查找的数a,若a<zjx,则要查找的数在中间数zjx的左边,就把数组二分,只在左边查找,右边同理,直到找到要查找的数。

二分法对于数据特别多的情况能极大的节约效率。

在上面的二分法中:

首先定义最大值  maxx,最小值  minx

中间值  zjx 也可以再循环中定义

我们不能确定循环的次数,所以这里使用  while  循环

首先找出中间值,中间值等于最大值和最小值的和除以2

如果要查找的数等于中间值,输出

如果中间值大于要查找的数,说明要查找的数比中间值小,在中间值左边,然后把中间值作为最大,继续循环

如果中间值小于要查找的数,说明要查找的数比中间值大,在中间值右边,然后把中间值作为最小,继续循环

如果遇到还剩下两个数的情况,这两个值就一个大的是最大值,一个小的是最小值,取出的中间值因为在程序中去掉了分数,只留整数,所以中间值也就是最小值,这时判断要查找的数是否是中间值即最小值右边的数即最大值,如果是,输出

JavaScript数字例子,二分法,冒泡排序的更多相关文章

  1. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  2. javascript数字验证输入

    javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...

  3. python 二分法例子及冒泡排序

    #!/usr/bin/env python #-*- coding:utf-8 -*- def binary_search(source_data,find_nu): mid = len(source ...

  4. javascript 数字格式化

    对数字进行格式化输出,是非常有意义的一件事情,例如许多时候,我们希望一个数字能够输出为指定格式的字符串,拿25.9878来说,我们可能会希望它能保留两位小数来说出,即结果为25.99,或者对于0.34 ...

  5. [Java Web] 4、JavaScript 简单例子(高手略过)

    内容概览: JavaScript简介 JavaScript的基本语法 JavaScript的基本应用 JavaScript的事件处理 window对象的使用 JavaScript简介: JavaScr ...

  6. (转载)javascript经典例子

    (转载)http://www.blogjava.net/hadeslee/archive/2007/11/24/161778.html 一.验证类1.数字验证内1.1 整数1.2 大于0的整数 (用于 ...

  7. javascript实用例子

    js学习笔记,别错过!很有用的. /////////////////////////////////////////////////////////////////////////////////// ...

  8. JavaScript数字精度丢失问题总结

    本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 0.1 + 0.2 != ...

  9. JavaScript数字精度上代码。

    /**不能超过 9007199254740992 * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差), ...

随机推荐

  1. 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说

    大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...

  2. Vue自定义指令获取DOM元素

    我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export de ...

  3. python win32 简单操作

    源由 刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定:后来看到python可以操作win32相关的api,恰好这一段时间正在学习python,感觉练手的时候到了~~~ 下载 要注意Pyt ...

  4. LayoutInflater 三种获得方式

    LayoutInflater 作用是从外部加载一个xml布局文件. 获得 LayoutInflater 实例的三种方式: 1.LayoutInflater inflater = getLayoutIn ...

  5. Spring框架——后处理器

    Bean的后处理 Spring容器实例化Bean实例之后进行的增强处理,关于这里的描述之前有点错误,现在来纠正一下:这个过程有点像AOP,不过我们知道AOP是对方法而言的,而Bean后处理器是针对Ja ...

  6. Ali OSS 服务端签名并设置回调,客户端上传文件

    一.最近做阿里云oss文件上传开发,一点收获分享给大家,帮助大家绕过一些坑.关于阿里云oss服务的介绍,我这里不做赘述了,可以查看阿里云OSS开发api文档. 在这里我主要介绍下,文件上传流程比较复杂 ...

  7. 揭秘 HashMap 实现原理(Java 8)

    HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了.从基本的使用角度来说,它很简单,但从其内部的实现来看(尤其是 Java 8 的改进以来), ...

  8. mysql主从复制笔记

    一:测试环境介绍 主从复制测试环境是ubuntu+mysql5.7,master服务器ip是192.168.71.135,slave服务器ip是192.168.71.137,ubuntu环境是从一台已 ...

  9. MySQL服务找不到了,navicat打不开数据库连接

    今天打开Navicat看看连接名,突然发现连接不上了,打开服务发现MySQL服务不见了,所以手动安装了遍MySQL服务. 详细步骤如下: 1.管理员身份打开cmd,切换到MySQL安装目录下的bin目 ...

  10. 51Nod 1001 数组中和等于K的数对 Set

    给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...