输入一个有序数组和一个数,若在数组中返回索引,若不在返回应该插入的索引

js数组考题,题目如上:输入一个有序数组和一个数,若在数组中返回索引,若不在返回应该插入的索引

我的答案如下:

 1         var arr = [1,2,4,5,7,9],
 2             cId = arr.length / 2,//中间索引
 3             cNum = Math.floor(arr[cId]);//中间数
 4         var _index = function(a,n){
 5             if(n >= a[a.length -1]){//判断最大值
 6                 n == a[a.length -1]? a[a.length -1] = n : a[a.length] = n;
 7                 return a.length - 1;
 8             } else if( n <= a[0]){//判断最小值
 9                 n == a[0]? a[0] = n : a.splice(0,0,n);
10                 return 0;
11             } else if(n >= cNum){//中间索引右侧
12                 for(var i = cId,l = a.length; i < l; i ++){
13                     if(a[i] == n){
14                         return i;
15                     }
16                 }
17             } else {//中间索引左侧
18                 for(var i = 0,l = cId; i < l; i ++){
19                     if(a[i] == n){
20                         return i;
21                     }
22                 }
23             }
24         }
25         function findIndex(a,n){// 目标数组 数字
26             var m = _index(a,n);
27             if(m || m === 0){//存在,返回索引 注意0
28                 return m;
29             } else {
30                 if(n >= cNum){//中间右侧
31                     for(var i = cId,l = a.length; i < l; i++){
32                         if(a[i] > n){
33                             a.splice(i,0,n);
34                             return i;
35                         }
36                     }
37                 } else {
38                     for(var i = 0,l = cId; i < l; i++){
39                         if(a[i] > n){
40                             a.splice(i,0,n);
41                             return i;
42                         }
43                     }
44                 }
45             }
46         }
47         var _d = findIndex(arr,2);
48         document.write('索引是' + _d + ',新数组:' + arr);

 

posted on 2014-06-09 16:24  violinxliu  阅读(323)  评论(0编辑  收藏  举报