2016-12-01 3 views
0

병합 정렬 프로그램은 이론적으로 두 개의 동일한 수의 배열을 찾습니다. 그러나 반환되는 값은 순서가 아니며 적절하지 않습니다. 병합 된 목록 끝에 세 개의 0이 표시되고 배열에 포함되지도 않습니다.병합 정렬이 반환되지 않음 적절한 값

public class Merge_Sort 
{ 
    public static void main(String [] args) 
    { 
     int [] a1 = new int[10]; 
     int [] b1 = {32, 26, 44, 87, 48, 51, 53, 89, 92, 1}; 

     a1[0] = 12; 
     a1[1] = 36; 
     a1[2] = 45; 
     a1[3] = 52; 
     a1[4] = 48; 
     a1[5] = 24; 
     a1[6] = 29; 
     a1[7] = 98; 
     a1[8] = 23; 
     a1[9] = 32; 

     int i = 0, j = 0, k = 0; 
     int[] merge = new int[a1.length + b1.length]; 

     while (i < a1.length && j < b1.length) { 
      if (a1[i] < b1[j]) { 
       merge[k] = a1[i]; 
       i++; 
      } else { 
       merge[k] = b1[j]; 
       j++; 
      } 
      k++; 
     } 

     for (int x : merge) { 
      System.out.println(x); 
     } 
    } 
} 
+0

병합 정렬에 대해 알아보기 : http://www.geeksforgeeks.org/iterative-merge-sort/ – rafid059

답변

1

이것은 병합 정렬이 아니라 병합 단계입니다. 입력 배열이 이미 정렬되어 있다고 가정합니다. 예제에서는 그렇지 않습니다.

또한 완료되지 않았습니다. 배열 끝에 도달하면 어떻게 될까요? 나머지 요소는 어떻게됩니까?

+0

그런 다음 mergesort에 대해 읽어 보시기 바랍니다. 온라인에는 엄청난 양의 자료가 있습니다. – George

+0

@JayLav 공격적 일 필요는 없습니다 :) 우리는 모두 (무료로) 도와주고 있습니다. 어쨌든 두 개의 더 작은 길이의 배열을 가져 와서 종이에 while 루프의 결과를 추적하십시오. 결과 배열이 정렬되지 않음을 알 수 있습니다. 입력 된 배열이 처음 정렬되는 경우에만 작성한 while 루프가 작동합니다. 내가 전에 게시 한 링크를 통해 읽어 보시기 바랍니다. :) – rafid059

+0

굉장, 고맙습니다 @ RafiduzzamanSonnet. – JayLav