数组的 查找 、排序、及字符串的应用

7.5数组查找

1查找:

a.这种查找方法最简单,但是查找的次数与数据量成正比,效率不高。

var a = [2, 5, 7, 9, 3, 4, 8];
var num = Number(prompt("请输入要查找的值:"));
var index = -1;//最初认为要找的数不在数组
for (var i ina) {
    if (a[i] == num) {
        index = i;
        break;
    }
}
alert(index);/*返回下标值*/

 

 

 

 

b.折半查找(二分查找)

假设在一个已经有序的数组中,可以利用折半查找大幅提高速率。

/*
* 思路:
*
* 1用left表示查找的范围起点,end表示终点
* 2只要start<=end就重复以下步骤
* 3和中间的位置(mid)两个数进行比较
* a.相等:找到了,结束
* b.大于:在前半段找,即 end=mid-1
* c.小于:在后半段去找,即start=mid+1
*
*
* */

var a = [2, 3, 4, 5, 6, 7, 8];
var num = Number(prompt("请输入要查找的值:"));
var index = -1;//最初认为要找的数不在数组

var start=0;
var end= a.length-1;

while(start<=end){
    varmid=Math.ceil((start+end)/2);
    if(num==a[mid]){
        index=mid;
        break;
    }else{
        if(num>a[mid]){
            start=+1;
        }else{
            end=mid-1;
        }
    }
}
alert(index)

折半查找的最快查找次数与数据量是对数关系,所以说它的查找量是很高的,但任何事都是有两面行的,它的高效率也是有代价的,也就是要要求有序。

 

 

 

2:冒泡排序:

var a = [9, 4, 2, 7, 10, 5, 6, 8, 1, 3];
for (var i = 0; i < a.length - 1; i++) {
   /*循环依次遍历a.length个元素*/
   
for (var j = 0; j <= a.length-i-1; j++) {
        /*形式一:下标是从零开始计数,到数组尾是a.length-1,要他移到a.length-2,给a.length-1交换位置
        * for (var j = 0; j <=a.length-2; j++) {
        *
        *
形式二:
        * (var j = 0; j <= a.length-i-1; j++)
        * */
       
if (a[j] > a[j + 1]) {
            //不满足条件就换位
           
var t = a[j];
            a[j] = a[j + 1];
            a[j+ 1] = t;
        }
    }
}
alert(a.toString());

 

3.队列:

先进先出(FIFO),在头部出队(shift),在尾部收队(push)。


4.堆栈

先进后出(FILO)在尾部进(push),在尾部出(pop)。

 

 

9.1:字符串

字符串的定义:定义一个变量,然后直接将字符串赋值给它。

访问字符串里面的字符:和数组的方式一样(str[i])、charAt(i)。

数组有的方法,字符串都有。

(1)访问字符串里的数值

a.数组方式:str[]

b.字符特有方式:charAt[i].

(2)查找

a.数组方式:indexof

b.字符串方式:seearch()方法:传入参数

(3)取字符串:

a.数组方式:slice()。

b.字符串特有的方法:传入参数(第一个参数,开始截取,第二个参数表达起始,结束位置即:截取长度)

substring(start end、)

(1)替换

数组方式:

Trim()方法:去除两端的空格符。

 

search(),传入参数(要搜索的子串),返回值是子串的第一个下标。这个方法的对大小写敏感。

Slice():

substr():传入参数(第一个参数,开始截取下标,如果没有第二个参数,他就一直截到最后)(第二个参数,截取长度)。

Substring()传入两个参数,第一个参数,开始截取下标,第二个参数,截取结束下标。

 

小写变大写的函数:toUpperCase()

大写变小写的函数:toLowerCase()

 

数组名+toUpperCase()

varstr = prompt("请输入一个英文字符串:");
var result = [];

 

alert(str.toUpperCase());

 

内容的换取:replace();

var str="helloworld fgfg";
    str=str.replace("",",");/*要换掉的东西+想换成的东西*/
alert(str);

 

9.4其他对象

选取一个数组中的最大最小的函数。

Math对象:

Math.max(a, b,c, d);

Math.min(a, b,c, d);

 

Math.PI:获取π值。

Math.E:获取e的值

Math.pow(x,y):获取x的y次方

Math(x):获取X开根的值

Math.abs(X):开平方

Math.floor(x):x的向下取整

Math.ceil(x):x的向上取整

Math.round(x):四舍五入。

Math.random():随机产生0——1之间的数。

 

Number对象属性:

constructor

返回对创建此对象的 Number 函数的引用。

MAX_VALUE

可表示的最大的数。

MIN_VALUE

可表示的最小的数。

NEGATIVE_INFINITY

负无穷大,溢出时返回该值。

NaN

非数字值。

POSITIVE_INFINITY

正无穷大,溢出时返回该值。

prototype

允许您有能力向对象添加属性和方法。

 

 

 

Number对象方法:

方法

描述

toExponential(x)

把对象的值转换为指数计数法。

toFixed(x)

把数字转换为字符串,结果的小数点后有指定位数的数字

toPrecision(x)

把数字格式化为指定的长度

toString()

把数字转换为字符串,使用指定的基数。

valueOf()

返回一个 Number 对象的基本数字值。

var c=1000000;
     c=c.toExponential();把对象的值转换为指数计数法。
alert(c); 

 

var c = 12.456123;
c = c.toFixed(5);把数字转换为字符串,结果的小数点后有指定位数的数字
alert(c);

 

 

var c = 12.456;
c = c.toPrecision(3);把数字格式化为指定的长度
alert(c);

 

 

split:把一段文字(字符串)分割成字符(分割之后是一个数组)。

var a="a b c";
resuld=a.split(" ");  把一段文字(字符串)分割成字符(分割之后是一个数组)
alert(resuld);/*["a","b","c"]*/

9.2时间

 

1定义一个日期:

不给参数,定义的日期为执行这条指令那一刻当前系统的日期。

当然也可以指定年月日时分秒,但也要特别注意的是月要从零开始,0表示一月。

修改日期信息:setYear、setMonth、setDate····

获取日期分量:

 getYear、getMonth

getMilliseconds   :是获取毫秒

getTime获取的是从1970-1-1  00:00:00  至今的毫秒数

 

shijian.setYear(2018);/**/
shijian.setDate(10);/**/
shijian.setHours(10);/**/

 

 

varshijian = new Date().toLocaleString();
document.write(shijian+"<br>");
var d =new Date();
document.write(d + "<br>");
var d =new Date(2017, 00, 03, 17, 14, 06);
document.write(d + "<br>");
var d =new Date("12 12,2012,17:34:34");
document.write(d + "<br>");
var d =new Date(1137075575000);
document.write(d + "<br>");

 

日期运算:

d1>d2

d1-d2   可得出毫秒数

 

便捷计算某月某天数:

   Var a=9;

 

 var d=new Date(2017,a,0);
    document.write(d.getDate()+"<br>");

打印三十天

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值