## JaveScript用二分法与普通遍历(冒泡) 转

丶不将就

概念:

从有序的数列中,折半查找.

思路:

-->　　找到数组中最中间的元素,将其作为基准

-->　　从0开始判断数组中的元素,与基准进行比较

-->　　比基准小的元素,存入左边,

比基准打得元素,存入右边

依次递归,得出结果

`````` 1  function getNum(target, Arr){
2         var middle = Math.floor(Arr.length / 2) ,res;
3         var last = Arr.length;
4         var temp;
5         function getRes(target,Arr){
6             count++;
7             if (target>Arr[middle]){
8                 temp=middle;
9                 middle= Math.floor(middle+Math.abs(last-middle)/2);
10                 last=temp;
11             }else if(target < Arr[middle]){
12                 temp=middle;
13                 middle = Math.floor(middle-Math.abs(last - middle) / 2)  ;
14                 last=temp;
15             }else{
16                 res = middle;
17                 return;
18             }
19             if(last==middle){
20                 Arr[middle]!=target;
21                 res = "不存在";
22                 return;
23             }
24             return getRes(target,Arr);
25         };
26         getRes(target, Arr);
27         return res;
28     }``````

``````1 function getNum2(target, arr) {
2         for (var i = 0; i < arr.length; i++) {
3             count2++;
4             if (target == arr[i]) {
5                 return i;
6             }
7         }
8         return "不存在";
9     }``````

`````` 1  (function(){
2         var arr = [];
3         for (var i = 0; i < 50000; i++) {
4             var flag = true;
5             var ele = Math.floor(Math.random() * 100000);
6             for (var j = 0; j < arr.length; j++) {
7                 if (arr[j] == ele) {
8                     flag = false;
9                     break;
10                 }
11             }
12             flag && arr.push(ele);
13         }
14         for (var i = 0; i < arr.length; i++) {
15             for (var j = 0; j < arr.length - i; j++) {
16                 var temp;
17                 if (arr[j] > arr[j + 1]) {
18                     temp = arr[j];
19                     arr[j] = arr[j + 1];
20                     arr[j + 1] = temp;
21                 }
22             }
23         }
24         window.arr=arr;
25         console.log(arr);//数组生成完毕，打印结果;
26     })()``````

``````var count=0;
console.log("二分法查找------------------------");
console.time("二分法耗时");
console.log("结果" +getNum(31322, arr));
console.log("查找次数为："+count);
console.timeEnd("二分法耗时");
console.log("普通查找------------------------");``````

``````var count2=0;
console.time("普通遍历耗时");
console.log("结果" +getNum2(31322, arr));
console.log("查找次数为："+count2);
console.timeEnd("普通遍历耗时");``````

`````` 1  function run(x){
2             count=count2=0;
3             console.log("二分法查找------------------------");
4             console.time("二分法耗时");
5             console.log("结果" +getNum(x, arr));
6             console.log("查找次数为："+count);
7             console.timeEnd("二分法耗时");
8             console.log("普通查找------------------------");
9             function getNum2(target, arr) {
10                 for (var i = 0; i < arr.length; i++) {
11                     count2++;
12                     if (target == arr[i]) {
13                         return i;
14                     }
15                 }
16                 return "不存在";
17             }
18             var count2 = 0;
19             console.time("普通遍历耗时");
20             console.log("结果"+getNum2(x, arr));
21             console.log("查找次数为："+count2);
22             console.timeEnd("普通遍历耗时");
23         };``````

### 丶不将就

2017/09/16
0
0
【python】手把手带你掌握算法基础01_二分法和选择排序法的实现

05/22
0
0
Java 9种排序算法详解和示例汇总

2018/06/02
0
0

2017/11/16
0
0
Unity 游戏中 排序算法和查找算法记录

KitStar
2017/11/07
0
0

Linux使用源码包安装软件

2
0
IPv4如何转换为IPv6?

ipv6已经逐渐在应用，现在已经有很多的运营商支持ipv6，前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用，它的表示方式是什么，今天我们来一起来详细了解下ipv6相关计...

xiangyunyan

3
0

2
0
MYSQL 嵌套事务（SAVEPOINT) 与Spring 事务传播

liangxiao

4
0
Chrome OS 更新新版本可让Linux访问USB连接的Android设备

linuxCool

17
0