비트교육_단기과정
이진검색 재귀함수 : 마기창
ELpsy
2022. 7. 13. 16:58
1. index 번호를 매개변수로 사용하여 기능 구현
package week_4; // 이진 검색 import java.util.Scanner; class BinSearch_RecurExam { private static int binSearch(int[] x, int first, int end, int key) { int middle = (first + end) / 2; if (first > end) { return -1; } else { if (x[middle] == key) { return middle; } else if (x[middle] < key) { first = middle + 1; return binSearch(x, first, end, key); } else { end = middle - 1; return binSearch(x, first, end, key); } } } public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("요솟수: "); int num = stdIn.nextInt(); int[] x = new int[num]; // 요솟수가 num인 배열 System.out.println("오름차순으로 입력하세요."); System.out.print("x[0]: "); // 첫 요소 읽력받음 x[0] = stdIn.nextInt(); for (int i = 1; i < num; i++) { do { System.out.print("x[" + i + "]: "); x[i] = stdIn.nextInt(); } while (x[i] < x[i - 1]); // 바로 앞의 요소보다 작으면 다시 입력받음 } System.out.print("검색할 값: "); // 킷값을 읽어 들임 int ky = stdIn.nextInt(); int idx = binSearch(x, 0, num - 1, ky); // 배열 x에서 값이 ky인 요소를 검색 if (idx == -1) System.out.println("검색 값의 요소가 없습니다."); else System.out.println("검색 값은 x[" + idx + "]에 있습니다."); } } | cs |
2. 배열을 재생성하여 기능 구현
package week_4; import java.util.Arrays; import java.util.Comparator; // 이진 검색 import java.util.Scanner; class BinSearch_RecurExam { public static int binSearch(int[] a, int keyValue) { if (a.length == 0) return -1; int startIndex = 0; // 시작인덱스 int endIndex = a.length - 1; // 마지막 인덱스 int middleIndex = (startIndex + endIndex) / 2; if (keyValue == a[middleIndex]) { return middleIndex; } else { if (keyValue < a[middleIndex]) { int[] b = Arrays.copyOfRange(a, 0, middleIndex); return middleIndex = binSearch(b, keyValue); } else { int[] b = Arrays.copyOfRange(a, middleIndex + 1, a.length); return middleIndex = binSearch(b, keyValue) + a.length / 2; } } } public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("요솟수: "); int num = stdIn.nextInt(); int[] x = new int[num]; // 요솟수가 num인 배열 System.out.println("오름차순으로 입력하세요."); System.out.print("x[0]: "); // 첫 요소 읽력받음 x[0] = stdIn.nextInt(); for (int i = 1; i < num; i++) { do { System.out.print("x[" + i + "]: "); x[i] = stdIn.nextInt(); } while (x[i] < x[i - 1]); // 바로 앞의 요소보다 작으면 다시 입력받음 } System.out.print("검색할 값: "); // 킷값을 읽어 들임 int ky = stdIn.nextInt(); int idx = binSearch(x, ky); // 배열 x에서 값이 ky인 요소를 검색 if (idx == -1) System.out.println("검색 값의 요소가 없습니다."); else System.out.println("검색 값은 x[" + idx + "]에 있습니다."); } } | cs |