JavaScript 코드의 병합 정렬 문제: 디버깅에도 불구하고 오류를 해결할 수 없습니다.
P粉256487077
2023-08-18 14:25:39
<p>모든 정렬 알고리즘을 이해하려고 노력 중입니다. 이것은 병합 정렬을 위해 작성한 코드인데 작동하지 않습니다. 무엇이 잘못되었는지 지적해 주실 수 있나요? </p>
<pre class="brush:php;toolbar:false;">해결: 함수 (A) {
count = this.mergeSort(A);
반환 횟수;
},
mergeTwoSortedArrays: 함수 (A, B) {
내가 = 0이라고 하자;
j = 0이라고 하자;
k = 0이라고 하자;
C = []로 두십시오;
while (i < A.length && j < B.length && A[i] || B[j]) {
if (A[i] < B[j]) {
C[k] = A[i];
나++;
k++;
}
또 다른 {
C[k] = B[j];
j++;
k++;
}
}
while (j < B.length) {
C[k] = B[j];
k++;
j++;
}
while (i < A.length) {
C[k] = A[i];
k++;
나++;
}
C를 반환;
},
mergeSort: 함수 (a) {
n = a.length;
(n <= 1)인 경우 a를 반환합니다.
c = Array.from({ 길이: Math.floor(n / 2) }, (_, i) => a[i]);
let d = Array.from({ 길이: n - c.length }, (_, i) => a[c.length + i]);
return this.mergeTwoSortedArrays(c, d);
}</pre>
<p>알겠습니다. 승인을 받으려면 더 많은 세부정보를 추가해야 하는 질문입니다.
그래서 내 접근 방식은 배열이 하나의 요소로 구성된 배열이 될 때까지 두 개의 동일한 부분으로 분할한 다음 병합 기술을 사용하여 두 개의 정렬된 배열을 병합하는 것입니다. </p>
i < A.length && j < B.length를 루프 조건으로 확인하면 됩니다.
업데이트된 코드는 다음과 같습니다.
으아악