2017-10-03 5 views
0

정렬 문제를 해결하기 위해 연습 문제를 겪고 있었는데이 문제를 보았습니까?콘솔 로깅 quicksort는 정렬을 줄입니다

배열을 빨리 정렬하고 console.log(quicksort(inputArray).toString());을 입력하면 나머지 숫자가 끝나지 않습니다. 당신은 다음 작업을 수행 할 때

여기 https://jsfiddle.net/qLyt1yfv/

function quicksort(inputArray) { 
 
    if (inputArray.length <= 1) { 
 
    return inputArray; 
 
    } else { 
 

 
    var left_subarray = []; 
 
    var right_subarray = []; 
 
    var newArray = []; 
 
    var pivot = inputArray.pop(); 
 
    var length = inputArray.length; 
 

 
    for (var i = 0; i < length; i++) { 
 
     if (inputArray[i] <= pivot) { 
 
     left_subarray.push(inputArray[i]); 
 
     } else { 
 
     right_subarray.push(inputArray[i]); 
 
     } 
 
    } 
 

 
    return newArray.concat(quicksort(left_subarray), pivot, quicksort(right_subarray)); 
 
    } 
 
} 
 

 
var input = [51, 42, 96, 83, 37, 5, 24]; 
 
var resultArray = quicksort(input); 
 

 
console.log(quicksort(input).toString()); 
 
console.log("Result Array: " + resultArray); 
 

 
document.getElementById('result').innerHTML = resultArray.toString();
<h1 id="result">Quicksort: </h1>

+0

의 사본을 전달합니다. 외부 링크에 의존하지 않는 것이 가장 좋은 방법입니다. 또한 사용자가 더 쉽기 때문에 결과를 얻을 가능성이 큽니다. – SherylHohman

답변

0

코드의 JSFiddle이다 : 당신은 그것의 마지막 요소를 삭제하여 원래의 배열을 수정하고

var pivot = inputArray.pop(); 

. 참고하거나 결과를 리턴하기 전에 어레이 위로 요소를 누름으로써 정렬 작업을 수행하기 전에 원본 배열의 복사본을 수행하거나하여이를 해결할 수

: 당신은 퀵 함수로 inputArray 전달

inputArray.push(pivot); 
+0

하지만 if 문은 내가 팝업 전에 catch하지 않습니까? 그리고 왜 콘솔 로그에서만 차단되는지 이해할 수 없습니까? –

+0

근사하지만 원래의 inputArray가 아닌 다른 배열 인'left_subarray'로만 되돌려줍니다. 처음에'quicksort'를 호출했을 때 원래의 배열을 수정 했으므로 콘솔 로그에서 끊어졌습니다. 그리고 다시 호출했지만 이번에는 결과가 콘솔에 출력되므로 하나의 요소가 누락되었습니다. 'quicksort'에 대한 첫 번째 호출 후에'console.log ("test :"+ input);를 넣어서 확인할 수 있습니다. 그러면 함수는 항상 원래 입력에서 마지막 요소를 제거합니다. –

+0

오오! 하하, 지금은 그것을보고, 바보 같은 질문에 대한 미안 해요, 나는 이것을 삭제합니다. –

0

및 당신은 입력 배열을 전달해서는 안

inputArray.pop에 의해 그것의 요소를() 제거, 그냥은 SO 코드로 JSFiddle에서 코드를 복사 한이 배열