간단한 비교 함수를 전달할 때 Array.sort() 호출에서 무슨 일이 일어나고 있는지 "보기"어렵습니다. 지금까지 해왔지만 숫자가 합쳐지지 않는 것 같아서 JavaScript가 어떻게 결론에 도달했는지 알고 싶습니다. 어쩌면 나는 그것의 근본적인 점을 놓치고있다.JavaScript의 내부 동작 Array.sort ([compareFunc]);
var nums = new Array(40,20,230,65);
var b = a.sort(function(a,b){
return a-b;
});
그래서, 이런 식으로 운동 :
= 40-20 = 20 (> 0), B 또는 그래서 20,40
230-65 = (165) (> 0) A, B 또는 매우 230,65
40-65 = -25 (< 0)이므로, B 또는 40,65
나는 그 숫자를 가지고 그것을 실행했고, 3 가지 계산을하고 20,40,65,230에 올랐지 만, "어떻게"를 모른다 ... 어떤 식으로 그것을 넣을 숫자를 선택 했는가? 생성 된 정렬 배열에 추가합니다. 제 말은 대답에서 여섯 개의 숫자를 얻었습니다. (세 가지 계산 결과) 어떻게 그 6 개를 필요한 네 개로 만들 수 있습니까?
도움이됩니다. 나는이 사실을 이해하고 정말로 싶습니다. :)
편집 : 좋아, 내가 어떻게 작동하는지, 원래 배열에 대한 mucks 정렬 함수에서 반환 된 값 당 숫자를 re-ordering. 그러나 4 개의 숫자 배열을 사용할 때 두 번의 "이동"으로 처리 할 수 있지만 JavaScript는 3 개이며 마지막 하나는 다소 관계없는 것 같습니다. 그것을 시도하고 볼 수 있습니다. :)
마지막으로 가장 좋은 업데이트!
이 질문을하는 동안 저는 종이와 자바 스크립트에 대해 배웠고 빠른 분류가 어떻게 작동하는지 발견했습니다. 나는 로그에 큰 아니지만,이게 내가 수학에서 더 많은 관심을 기울일 수 있도록 가르쳐 줄 것 같아.
공간을 절약하기 위해 마지막 예를 사용 했으므로 여기에 내가 수행 한 정렬의 또 다른 예가 있습니다. 그것은 JS에서 배열에서 선택하는 숫자 쌍의 순서가 다소 예측할 수 없다는 점을 제외하고는 종이에서했던 것과 정확히 일치합니다. 그래서 실제로 할 수있는 비교가 더 많습니다. 시간에 대한 결과를 미리 생각하고 원하는대로 숫자 쌍을 선택하십시오 (매우 컴퓨터가 아닌 것처럼).
이 테스트에서는 6 회의 계산에서 JS가 그것을 10 번 수행했는데, 공정성이 더 철저합니다.
배열 == 2,16,7,3,10
2-16 == -14 (< 0) | 2,16,7,3,10
16-7 == 9 (> 0) | 2,7,16,3,10
16-3 == 13 (> 0) | 2,7,3,16,10
16-10 == 6 (> 0) | 2,7,3,10,16
2 - 7 == -5 (< 0) | 2,7,3,10,16
7-3 == 4 (> 0) | 2,3,7,10,16
배열 == 2,3,7,10,16
이 빠른 종류의 피벗 번호를 사용하기 때문에 엄격하게, 빠른 종류의 말하기, 경우 확실하지 않음 정렬에서 배열을 나눌 중심 지점으로 사용합니다. 그러나 이것이 JS가 어떻게하고 있는지에 대한 나의 이해입니다. 틀 렸으면 고쳐줘. :)
두 개의 비교만으로는 정렬 할 수 없으며'[4,2,1,3]'은 최상의 경우에'[2,4,1,3]'이 될 수 있습니다. – Dykam
Array.sort()를 비교 함수없이 사용하면 사전 식으로 사전 식으로 정렬됩니다. 그러나 "a-b"와 같은 정렬 기준을 통과하면 정렬을 제어합니다. 따라서 [4,2,1,3]은 [1,2,3,4]이 될 것입니다 ... 그건 내 이해입니다. :) – Tom