2017-01-03 10 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

イエス様、はい私は質問があります - なぜそれは他の人ではなく一部で働いていますか? Btw、 "すべてのテストに合格しなければ、コードレビューでレビューする準備ができていません"。だから、確かに.. –

答えて

2

compareFunctionなしでArray#sort()を使用すると、すべての要素が数字ではなく文字列として扱われるという結果が得られます。おそらく、間違ったインデックスになります。

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

あなたは数字でソートするため

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

のようにコールバックを使用しcoud。

+0

あなたがそれを捕まえたのかどうかは分かりませんが、私が作成したソートアルゴリズムは 'Array#sort()'でうんざりしているようです。私は選択ソートを切り離し、単純に '.sort(...) 'に戻しました。それはうまくいきます。私はあなたの答えをとにかく受け入れるでしょう。それは結局、正しい道で私を導いたからです。ありがとう:) –

関連する問題