数组的应用

数组的应用

(1)查找

其实在数组的属性与方法中,我们学习了一个indexOf方法就是查找,它是系统提供的方法,我们其实也可以实现自己的查找方法。

a、顺序查找

<script>
    var a = [3,1,34,45,35,67,84,36,24];
    var num = Number(prompt("请输入要查找的值:"));
    var index = -1;//最初认为要找的数不在数组中
    for(var i in a){
        if(a[i] == num){
            index = i;
            break;
        }
    }
    alert(index);
</script>
这种查找方式最简单,但是查找次数与数据量成正比,效率不高。

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

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

/*折半查找
* 思路:
* (1)用start表示查找范围的起点,end表示终点
* (2)只要start<=end就重复以下步骤
* (3)和中间位置(mid)的那个数进行比较
*   a、相等:找到了,结束
*   b、大于:在前半段找,即end=mid-1
*   c、小于:在后半段找,级start=mid+1
*   (4)输出查找结果
* */
var a = [1,3,24,34,35,36,45,67,84,];
var num = Number(prompt("请输入要查找的值:"));
var index = -1;//最初认为要找的数不在数组中

var start = 0;
var end = a.length-1;
while(start <= end){
    var mid = Math.ceil((start+end)/2);//计算中间位置
    if(num == a[mid]){
        index = mid;//把找到的位置记下来
        break;
    }else{
        if(num > a[mid]){
            //在后半段找
            start = mid + 1;
        }else{
            //在前半段找
            end = mid - 1;
        }
    }
}
alert(index);
折半查找的最坏查找次数与数据量的关系是对数关系,所以说它的查找效率很高,但是任何事物往往都有两面性,它是高效率 也是有高代价的,也就是要求数组必须有序。

(2)排序(冒泡排序)

var a = [3,1,34,45,35,67,84,36,24,46];
    for (var i=0; i<=a.length-1; i++) {
        for (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)

var a = [];
a.push(1);
document.write(a.toString() + "<br>");
a.push(2);
document.write(a.toString() + "<br>");
a.push(3);
document.write(a.toString() + "<br>");
a.shift();
document.write(a.toString() + "<br>");
a.shift();
document.write(a.toString() + "<br>");
a.shift();
document.write(a.toString() + "<br>");
(4)堆栈

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

var a = [];
a.push(1);
document.write(a.toString() + "<br>");
a.push(2);
document.write(a.toString() + "<br>");
a.push(3);
document.write(a.toString() + "<br>");
a.pop();
document.write(a.toString() + "<br>");
a.pop();
document.write(a.toString() + "<br>");
a.pop();
document.write(a.toString() + "<br>");

今天这篇是为了补充上次写的JS的数组内容,都是使用案例来说明这些知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值