2014-12-10 3 views
0

안녕하세요. 병합 정렬 작업을하고 있습니다. 코드가 적합하지만 올바른 결과를 얻지 못했습니다. 내 코드는 다음과 같습니다. 결과는 "876323149"입니다. 대단히 감사합니다.자바 병합 정렬이 작동하지 않습니다.

public class MergeSort 
{ 
    private static int[] local; // for use in copying 
    private static int[] a; 
    public static void main(String[] args) 
{ 
    int[] test = {2,3,1,4,7,8,6,3,9}; 
    sort(test);} 

    public static void sort(int[] orig) 
    { 
    int n = orig.length; 
    local = new int[n]; 
    a = orig; 
    recursiveSort(0, n-1); 
    for(int i = 0; i < a.length; i ++){ 
    System.out.print(a[i]); 
    } 
    } 

    private static void recursiveSort(int lo, int hi) 
    { 
    int mid =(hi + lo)/2; 
    if(hi-lo > 2){ 
     recursiveSort(lo, mid); 
     recursiveSort(mid + 1, hi); 
     merge(lo, mid + 1, hi); 

    }  
    } 

    private static void merge(int lo, int mid, int hi) 
    { 
    int d = lo; 
    int b = mid + 1; 
    int c = lo; 
    for (int i = lo; i <= hi; i++) { 
     local[i] = a[i]; 
    } 
    while(d <= mid && b <= hi){ 
     if(local[d] > local[b]){ 
     a[c] = local[d]; 
     d++;} 
     else{ 
     a[c] = local[b]; 
     b++;} 
     c++;} 
    while (d <= mid) { 
     a[c] = local[d]; 
     c++; 
     d++; 
    } 
    } 
} 
+0

아니, 그냥 오류가 무엇인지 알아 내려고 노력하고 그 웹 사이트에 비교 시도하고 난 무엇 인 근본적으로이 코드를 기반으로 – user3808597

답변

0

당신은 모르겠지만 안녕보다 작은 있는지 확인해야합니다 그래서 recursiveSort는 반복적으로 다른 배열을 정렬 유지하고 길이 < = 1의 배열을 정렬하려고하지 않습니다 그리고 더 중요한 것은 중반 내부 설정해야 은 if 문이 여기에

라고이 if 문마다의 수정입니다 :

private static void recursiveSort(int lo, int hi) 
{ 
if(lo < hi){ 
int mid =(hi + lo)/2; 

recursiveSort(lo, mid); 
recursiveSort(mid + 1, hi); 
merge(lo, mid + 1, hi); 

}  
} 
관련 문제