본문 바로가기

개발자노트

정렬 [이진탐색(이분검색)]

package class04;

import java.util.Scanner;

public class Test06 {

	public static void main(String[] args) {

		// [이진탐색(이분검색)]

		// -> 탐색할 대상 배열이 "정렬"되어있어야 한다.

		int[] data = { 1, 40, 50, 55, 60, 70, 81, 92, 94, 100 };

		Scanner sc = new Scanner(System.in);

		while (true) {

			boolean flag = true; // 어떠한 행위가 잘 되었는지를 체크하는 변수

			// T / F 밖에 없음

			System.out.print("검색: ");

			int num = sc.nextInt();

			int L = 0;

			int H = data.length - 1;

			while (true) {

				int M = (L + H) / 2; // M: L~H의 가운데이다. 1~100중에서 50을 물어보는 것 처럼

				if (data[M] == num) {

					System.out.println("[" + M + "]에 " + num + "가 존재합니다!");

					break;

				}

				else if (data[M] > num) { // DOWN 상황 , break 당하지 않았다면 물어봐야함

					H = M - 1;

				}

				else { // UP 상황

					L = M + 1;

				}

				if (L > H) { // 교차(cross) 상황

					System.out.println("찾는 데이터가 없습니다!");

					flag = false; // 만약, 찾으려는 데이터가 없다면 F로 값을 변경

					break;

				}

			}

			if (flag) { // flag변수가 T상태를 유지하면, 멈출수있다!

				// 내가 원하는 데이터를 찾은 상황 -> T

				// 내가 찾으려는 데이터가 없는 상황 -> F

				break;

			}

		}

	}

}