2016-10-03 2 views
-3

이 코드는 나누기와 정복으로 간단한 병합 정렬입니다. 정렬되지 않은 배열을 출력으로 얻고 있는데, 이는 입력 배열과 동일합니다. 이 코드에서 버그를 지적 해주십시오 :병합 정렬 Java에서

import java.util.*; 
class Merge { 
    public static void main(String[] args) { 
     int n,i; 
     Scanner sc = new Scanner(System.in); 
     System.out.println("enter size of array"); 
     n = sc.nextInt(); 
     int b[] = new int[n]; 
     System.out.println("enter array"); 
     for (i=0;i<n;i++) { 
      b[i] = sc.nextInt(); 
     } 
     System.out.println("sorted array"); 
     int c[] = sort(b); 
     for (i=0;i<n;i++) { 
      System.out.println(c[i]); 
     } 
    } 
    static int[] sort(int[] a) { 
     int i; 
     int l = a.length; 
     if (l<2) { 
      return a; 
     } 
     int mid = l/2; 
     int left[] = new int[mid]; 
     int right[] = new int[l - mid]; 
     for (i=0;i<mid;i++) { 
      left[i] = a[i]; 
     } 
     for (i=mid;i<l;i++) { 
      right[i-mid] = a[i]; 
     } 
     sort(left); 
     sort(right); 
     merge(left,right,a); 
     return a; 
    } 
    static void merge(int[] left , int[] right , int[] a) { 
     int p=0,q=0,r=0; 
     while (p<left.length && q<right.length) { 
      if (left[p]<=left[q]) { 
       a[r] = left[p]; 
       p++; 
      } else { 
       a[r] = right[q]; 
       q++; 
      } 
      r++; 
     } 
     while (p<left.length) { 
      a[r] = left[p]; 
      p++; 
      r++; 
     } 
     while (q<right.length) { 
      a[r] = right[q]; 
      q++; 
      r++; 
     } 
    } 
} 
+1

실행을해야합니다. – Kayaman

+0

디버거를 사용하여 직접 알아내는 것이 좋습니다. 그것은 당신에게 더 많은 길을 도움이 될 것이고 당신은 유용한 것들도 배울 것입니다. – UnholySheep

답변

1

을 병합 방법에 당신은 문제가 당신의 상태

  if (left[p]<=left[q]) { 

으로 디버거를 통해

  if (left[p]<=right[q]) {