首页 > 代码库 > 9.19数组以及经典案例
9.19数组以及经典案例
数组:相同类型数据的集合(此解释适于强类型语言)
强类型语言中:1.数组里面只能存放相同数据类型的数据。
2.定义数组的时候需要制定一个长度(可以存放的元素数量)。
3.内存空间连续。
集合中:1.可以存放任意类型的数据。
2.定义时不需要制定长度。
3.内存空间不连续。
JS中:1.可以存放任意类型数据。
2.定义时不需要制定长度。
定义数组:var attr = array(); 索引:开始为0
alert(attr[]);
var attr=[1,3.14,"aa"] 使用方括号来定义
alert(attr.length); length:代表数组长度 push:往数组里面追加元素
数组遍历:经常使用for循环。 控制循环次数
for(car i =0;i<attr.length;i++)
alert(attr[i]);
方式遍历:foreach()(通常用与强类型语言)
forrach(int a in list)
{
a;
}
弱类型语言用for: 当变量a取不到值时,会自动跳出循环。var a取的是索引
for(var a in attr)
{
alert(attr[a]);
}
示例:
1. 10个分数,求总分、最高分、最低分
//总分
var attr=[89,80,76,49,90,25,85,76,59,40]
var sum=0;
for(var i=0;i<attr.length;i++)
{
sum += attr[i];
}
alert(sum);
//最高分
var zg =0;
for(var i=o;i<attr.length;i++)
{
if(attr[i]>zg)
{
zg=attr[i];
}
}
alert(zg);
//最低: 在有最高值的情况下取最高值
var zd = zg;
for(var i=0;i<attr.length;i++)
{
if(attr[i]<zd)
{
zd = attr[i];
}
}
alert(zd);
2.添加去重:
var attr =[2,5,10,16,27];
var sj=27;
var cf=true;
for(var i=0;i<attr.length;i++)
{
if(sj == attr[i])
{
cf = false;
break;
}
}
if(cf)
{
attr.push(sj);
alert(attr.length);
}
else
{
alert("有重复值");
}
3.对数组元素排序(♥ 冒泡排序):
var attr = [1,8,26,4,15,3,7,42,9];
冒泡排序样式:
8 6 4 5 3 7 2 9 1 8
8 6 5 4 7 3 9 2 1 7
8 6 5 7 4 9 3 2 1 6
8 6 7 5 9 4 3 2 1 5
8 7 6 9 5 4 3 2 1 4
8 7 9 6 5 4 3 2 1 3
8 9 7 6 5 4 3 2 1 2
9 8 7 6 5 4 3 2 1 1
两个相邻的元素进行比较,满足条件元素互换
进行比较的轮数是数组的长度减一
定义一个交换使用的中间变量
var zj = 0;
for(var i=0;i<attr.length-1;i++)
{
for(var j=0;j<attr.length-1-i;j++)
{
if(attr[j]<attr[j+1])
{
zj=attr[j];
attr[j]=attr[j+1];
attr[j+1]=zj;
}
}
}
alert(attr[0]);
这一种便捷排序代码在JS中不准确,不要用:
var attr = [1,8,26,4,15,3,7,42,9];
attr.sort();
alert(attr[3]);
在数组里面查找数据:(循环遍历方式)(二分法)
循环遍历方式:
var sy = -1;
for(var i=0;i<attr.length;i++)
{
if(attr[i]==v)
{
sy = i;
}
}
if(sy == -1)
{
alert("没找到数据");
}
else
{
alert("该数据在数组里面的索引为:"+sy);
}
♥ 二分法:
var minsy = 0; (最小索引)
var maxsy = attr.length-1;
var midsy ;
while(true) (因为循环次数不同,so用while)
{
midsy = parseInt((minsy+maxsy)/2); (若类型语言中避免小数要用parseint转换)
if(attr[midsy] == v) (比较中间值和用户的值判断中间索引的值是否等于用户要查找的值)
{
break; (如果等于,就退出循环,找到了值)
}
if(midsy == minsy) (判断是否只剩下两个数据)
{
if(attr[midsy+1]==v) (判断两个数据中的另外一个是否等于用户查找的值)
{
midsy = midsy+1; (找到了值,退出循环)
break;
}
else
{
midsy = -1; (没找到值,退出循环)
break;
}
}
if(attr[midsy]>v) (用来改范围)
{
maxsy = midsy;
}
else
{
minsy = midsy;
}
}
alert(midsy);
9.19数组以及经典案例