2017-01-03 42 views
1

此代码在插入另一个元素后对数组进行排序,并返回已排序数组中插入元素的索引(需要返回第一个位置或最低可能的索引)。选择排序不稳定后在代码排序阵列中查找编号的位置的代码?

CODE:

function getIndexToIns(arr, num) { 
 
    // Find my place in this sorted array. 
 
    var sortedarr = sort(combinelists(arr, num).sort()); 
 
    var pos = []; 
 
    for (i = 0; i < sortedarr.length; i++) { 
 
    if (sortedarr[i] == num) { 
 
     pos.push(i); 
 
    } 
 
    } 
 
    return pos[0]; 
 
} 
 

 
function combinelists(arr1, arr2) { 
 
    var newarr = []; 
 
    newarr.push(arr2); 
 
    for (i = 0; i < arr1.length; i++) { 
 
    newarr.push(arr1[i]); 
 
    } 
 
    return newarr; 
 
} 
 

 
function sort(arr) { 
 
    if (arr.length < 2) { 
 
    return arr; 
 
    } else { 
 
    var l = arr.length/2; 
 
    var leftarr = arr.slice(0, l); 
 
    var rightarr = arr.slice(l); 
 
    return combine(sort(leftarr), sort(rightarr)); 
 
    } 
 
} 
 

 
function combine(array, another_array) { 
 
    var result = []; 
 
    while (array.length && another_array.length) { 
 
    if (array[0].age <= another_array[0].age) { 
 
     result.push(array.shift()); 
 
    } else { 
 
     result.push(another_array.shift()); 
 
    } 
 
    } 
 

 
    while (array.length) 
 
    result.push(array.shift()); 
 

 
    while (another_array.length) 
 
    result.push(another_array.shift()); 
 
    return result; 
 
} 
 

 
console.log(getIndexToIns([2, 20, 10], 19)); 
 
console.log(getIndexToIns([2, 5, 10], 15));

但它似乎并没有对所有输入工作:

It works for the following tests: 
[10, 20, 30, 40, 50], 30 
[40, 60], 50 
[2, 20, 10], 19 

But it doesn't work for these: 
[2, 5, 10], 15 
[5, 3, 20, 3], 5 
[3, 10, 5], 3 
[10, 20, 30, 40, 50], 35 

什么是坏了?

+0

你真的有问题吗? –

+0

有一个[代码评论堆栈交换站点](https://codereview.stackexchange.com/) –

+1

耶稣伙计,是的,我有一个问题 - 为什么它为一些而不是其他人?顺便说一句,“如果它没有通过所有的测试,它没有准备好审查代码审查”。所以,是啊.. –

回答

2

您使用Array#sort()而不是compareFunction,这意味着你会得到一个结果,每个元素被视为字符串而不是数字。这可能导致错误的索引。

var sortedarr = sort(combinelists(arr,num).sort()); 
//           ^^^^^^ 

您coud使用回调像

var sortedarr = sort(combinelists(arr,num).sort(function (a, b) { return a - b; })); 

由数字排序。

+0

嗯,我不确定你是否抓住了它,但是我创建的排序算法似乎正在搞乱'Array#sort()'。我断开了选择排序并恢复为简单的'.sort(...)。“它运作正常。无论如何,我会接受你的回答,毕竟它让我走上了正确的道路。谢谢 :) –