2017-01-03 4 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 (...). '로 되돌 렸습니다. 그리고 그것은 작동합니다. 나는 어쨌든 당신의 대답을 받아 들일 것입니다. 그것은 결국 올바른 길로 인도했습니다. 감사 :) –