2011-12-16 4 views
3

병합 정렬을 구현하려고하는데 기본 조건을 구현하는 데 문제가 있습니다.병합 정렬의 기본 조건

나는 두 개의 정렬 된 배열을 취하고 병합 된 배열을 반환하는 함수 merge을 가지고 있습니다. 기본 조건이 여기에 무엇

private static int[] mergeSort(int[] a, int low , int high) 
{ 
    int mid = (low + high) /2; 
    if (low < high) 
    { 
     return merge(mergeSort(a,low, mid-1), mergeSort(a, mid , high)); 
    } 
    return //return what ? 
} 

아래로

int[] merge(int[] a , int[] b) 

지금 내 병합 정렬 루틴은? 내가 뭘 만들고있는 실수 야?

답변

2

기본 조건은 정의에 따라 이미 정렬 된 단일 요소 목록 a입니다. 그냥 돌려 보내.

0

이미 정렬되었으므로 a을 돌려 주면됩니다 (최대 하나의 요소 만 포함).

1

소트 방법은 두 가지 반환 조건이 있습니다

  • 기본 조건을 -해야 두 개의 정렬 된 배열이 병합 된

병합 방법 - 배열

  • 조건을 합병
  • 단 하나의 항목이있다 2 개의 소트 된 배열을 받아, 1 개의 소트 된 배열을 돌려줍니다.

    public int[] sort(int[] input){ 
        int mid = input.length/2; 
        if(input.length > 1){ 
        // create and populate left and right arrays to merge 
        // left => input[0 > mid-1] 
        // right => input[mid > input.length] 
        return merge(sort(left), sort(right)); 
        } 
        return input; 
    } 
    
    public int[] merge(int[] left, int[] right){ 
        // your merge logic 
    }