首页 > 代码库 > 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数组以及经典案例