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对象属性:
返回对创建此对象的 Number 函数的引用。 | |
可表示的最大的数。 | |
可表示的最小的数。 | |
负无穷大,溢出时返回该值。 | |
非数字值。 | |
正无穷大,溢出时返回该值。 | |
允许您有能力向对象添加属性和方法。 |
Number对象方法:
方法 | 描述 |
把数字转换为字符串,使用指定的基数。 | |
返回一个 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>");
打印三十天