2016-08-20 2 views
1

필자는 거품 정렬을위한 기능이있어서 확실하게 작동한다고 느꼈다. 나는 왜 함수가 단순히 undefined를 반환하는지 이해하지 못한다. 다시 실행해야하는지 여부를 확인했습니다. my reRun 변수가 true로 설정되면 재귀가 발생하고 false로 설정된 경우 배열을 반환해야합니다.왜 내 버블 정렬 함수가 else를 건너 뛰고 정의되지 않은 값을 반환합니까?

bubbleSort(array); 

에 : 당신이 줄을 패치해야

var bubbleSort = function(array) { 
    // Your code here. 
    var tmp; 
    var next; 
    var curr; 
    var reRun = false; 
    console.log(reRun) 
    for(i = 0; i < array.length; i++){ 
    // set curr var to current item and tmp to the next one 
    next = array[i+1]; 
    // console.log('next', next) 
    curr = array[i]; 
    // console.log('curr', curr) 
    // check to see if the curr value is greater than the nex 
    if(curr > next){ 
     // if it is greater than set temp to be the next val and swap 
     // the two positions 
     array[i] = next 
     array[i+1] = curr; 
     reRun = true; 
    } 
    } 
    if(reRun === true){ 
    bubbleSort(array) 
    } else if(reRun === false){ 
    return array; 
    } 

}; 

console.log(bubbleSort([2, 1, 3])); // yields [1, 2, 3] 
+1

재귀 호출을 수행 할 때 반환하는 모든 것을 반환하는 것을 잊지 마십시오 :'return bubbleSort (array)'. 즉 재귀가 적절하지 않은 경우 while 루프를 대신 사용하십시오. – georg

+1

한 번에 너무 많은 루핑을합니다 :'next = array [i + 1];'마지막으로'undefined'를 지정합니다. – trincot

+1

제안 사항 .. 당신은 다음을 확인해야합니다 : 배열 [i + 1]은 i가 scaisEdge

답변

2

: 여기

내 코드의

return bubbleSort(array); 

그 이유는 결과 만 의해 돌려 주어집니다 bubbleSort에 대한 최종 호출입니다. 반환되지 않은 모든 이전 호출을 통해 스택에 전파되지 않습니다. 그 중에서 아무것도.