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

xiaoxiao2021-02-28  98

(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)。

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

效果图:

转载请注明原文地址: https://www.6miu.com/read-56426.html

最新回复(0)