2014-02-26 6 views
0

정렬 나는 정렬되지 않은 번호 목록에서 읽고있다. 숫자가 오름차순이되도록 insertInOrder 메서드를 변경해야합니다. 내 방법은 지금 목록을 거꾸로 인쇄하는 것 외에는 아무 것도하지 않습니다.재귀 이진 검색

static void insertInOrder(int[] arr, int cnt, int newVal) 
{ 

    int index = -(bSearch(arr, 0, arr.length-1, newVal)) - 1; 
    { 
      for (int i = cnt; i >= index+1 ; --i) 
      { 
        arr[i] = arr[i-1]; 
      } 

     arr[index] = newVal; 
    } 

} 

public static int bSearch(int[] a, int lo, int hi, int key) 
{ 
    int mid = lo+(lo + hi)/2; 

    if (lo <= hi) 
     return -(lo+1); 
    else if (a[mid] == key) 
     return mid; 
    else if (a[mid] < key) 
     return bSearch(a, mid+1, hi, key); 
    else 
     return bSearch(a, lo, mid-1, key); 
} 

편집 :

input: 5 24 27 23 8 6 19 
current output: 19 6 8 23 27 24 5 
expected output: 5 6 8 19 23 24 27 
+0

'입력', '현재 출력'및 '예상 출력'이 명확하게 표시되어 있습니다. 나는 당신의 의견이'5 24 27 23 8 6 19'라고 생각합니다 ...? 잘 모르겠지만 ... – MirroredFate

+0

이진 검색은 정렬 된 배열에서만 작동합니다. 검색 할 항목의 순서에 의존하기 때문에 ... – njzk2

+0

참고로 Java의 [Array] (http : // docs.oracle.com/javase/7/docs/api/java/util/Arrays.html) 클래스에는 이미 binary search MirroredFate

답변

1

가 왜 Arrays 클래스 sort 방법을 사용하여 바로 사용하지 않는?

int myNumbers[] = {24,7,13,18,29}; 
    Arrays.sort(myNumbers); 
    for(int i : myNumbers) { 
     System.out.println(i); 
    } 

docs here을 참조하십시오.

+0

이 있으며, 그러면 컴퓨터가 충돌합니다. :/ 이렇게하는 것이 가장 쉬운 방법입니다. – MirroredFate

+0

그것은 프로젝트의 일부이므로 insertInOrder 메서드에서 bSearch를 구현해야합니다. – user3287300