Java 병합 정렬의 정렬 부분 이해 (Understanding the sort part of Java Merge sort)


문제 설명

Java 병합 정렬의 정렬 부분 이해 (Understanding the sort part of Java Merge sort)

병합 정렬의 병합 부분이 어떻게 작동하는지 이해하지만 어떤 이유로 병합 기능이 호출되기 전에 발생하는 재귀/나누기 부분을 감쌀 수 없습니다. 아래 샘플 코드를 사용하여 다양한 변수의 값을 추적하려고 시도했지만 무슨 일이 일어나고 있는지 완전히 이해할 수 없었습니다.

public void sort(int arr[], int l, int r) { 
    if (l < r) 
    { 
        // Find the middle point 
        int m = (l+r)/2; 

        // Sort first and second halves 
        sort(arr, l, m); 
        sort(arr , m+1, r); 

        // Merge the sorted halves 
        merge(arr, l, m, r); 
    } 

}

내 보기에는 m이 계속 정렬로 전달되는 것 같습니다. 0이 될 때까지 두 번째 sort() 호출과 merge() 호출이 실행되지 않는 것처럼 보입니다. 수행된 단계를 설명할 수 있습니까?


참조 솔루션

방법 1:

Take the following array:

[4][2][5][1][3]

We're going to split it in half:

[4][2][5]    [1][3]

And again:

[4][2]    [5]    [1]    [3]

And again:

[4]    [2]    [5]    [1]    [3]

Notice how we now have 5 sorted arrays (each of length 1). Now it's time to merge them together, sorting as we go. It's a very simple (read: low time‑complexity) operation to merge two sorted arrays into a new sorted array:

[2][4]    [1][5]    [3]

Now we have 3 sorted arrays. Let's merge them again:

[1][2][4][5]    [3]

And one final time:

[1][2][3][4][5]

It's now been sorted.

(by user3552172Michael Bianconi)

참조 문서

  1. Understanding the sort part of Java Merge sort (CC BY‑SA 2.5/3.0/4.0)

#mergesort #Sorting #java






관련 질문

파이썬에 대한 병합 정렬(잘못된 것을 찾을 수 없음) (Merge Sort in place for python (Cant find what is wrong))

두 가지 빠른 수정 문제 - 병합 정렬 (two quick fix issues - Merge Sort)

Java로 작성된 병합 정렬 프로그램이 작동하지 않습니까? (My merge sort program written in Java is not working?)

MergeSort 문제: "... VariableDeclaratorId"가 FormalParameterList를 완료합니다. (MergeSort Issues: "... VariableDeclaratorId" to complete FormalParameterList)

크기가 16인 배열로 병합 정렬의 복잡성을 찾는 방법 (how can we find the complexity of merge sort with an array of size 16)

Java 병합 정렬의 정렬 부분 이해 (Understanding the sort part of Java Merge sort)

이 재귀가 기본 사례를 얻지 못하는 이유는 무엇입니까? (Why is this Recursion not getting its base case?)

Java 오류: java.lang.IllegalArgumentException: 비교 방법이 일반 계약을 위반함 (Java Error: java.lang.IllegalArgumentException: Comparison method violates its general contract)

수정된 MergeSort 런타임 (Modified MergeSort runtime)

내 병합 정렬 프로그램이 Java에서 범위를 벗어난 배열을 보여줍니다. (My merge sort program shows an array out of bound in Java)

Array Merge sort Sorting Count and Sorting time Python (Array Merge sort Sorting Count and Sorting time Python)

병합 정렬을 사용하여 연결 목록 정렬에 대한 오답 얻기 (Getting wrong answer for sorting linked list using merge sort)







코멘트