JS中数组的应用与简单算法(冒泡排序)

来源:互联网 发布:itunes软件许可协议 编辑:程序博客网 时间:2024/06/16 19:23

(1)查找

 

Indexof是系统提供的

我们也可以实现自己的查找方法


<script>    var a = [1,2,3,4,5,65,6,7,8,98,9];    var num = Number(prompt("请输入要查找的值"));    var index = -1;//最初认为要找的数不在数组中    for(var i in a ){        if(a[i]==num){            index = i;            break;        }    }    alert(index);</script>

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


(2)折半查找(二分查找)

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


<script>    /*    * 查找思路:    * 1、用left表示查找范围的起点,end表示终点    * 2、只要start<=end就重复一下步骤    * 3、和中间位置(mid)的那个数进行比较    * a.相等: 找到了,结束    * b.比中间的数大:在后半段找,即end = mid-1    * c.币中间的数小:在前半段找,即 start = mid+1    * 4、输出查找结果    * */    var a = [1,2,3,4,5,6,34,45,65,98,102];    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);</script>

折半查找的最坏查找次数与数据量的关系是对数关系,所以说它的查找效率是很高,

但是任何事情往往都是有两面性,特德高效率也是有高代价的,也就是必须要求数组有序排列。


(2)排序(冒泡排序)

<script>    /*    * 冒泡排序* 两个两个进行比较,小的放在前面,进行对调    * */    var a = [1,5,3,4,2,6,99,103,89,98];    for (var i =1;i<= a.length-1;i++) {        for (var j = 0; j <= a.length -i-1/*(-2)*/; j++) {            if (a[j] > a[j + 1]) {                var t = a[j];                a[j] = a[j + 1];                a[j + 1] = t;            }        }    }    alert(a.toString());</script>

(3)队列

先进先出(FIF0),在头部出队(shift),在尾部入队(push)。

可以模拟银行的电脑排队机制

<script>    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>");</script>
效果图:

(4)堆栈

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

(先进后出,像刷碗一样,先刷的,压到下面了,最后才能用)

效果图: