검색하기(search)

강9·2023년 11월 24일
0

Java

목록 보기
35/71
post-thumbnail
//   index =  0  1  2  3  4  5  6  7  8   9
int[] data = {10,20,30,40,50,60,70,80,90,100};

// 70의 index 값은? --> 6
// - 순차검색 : 맨 앞부터 순서대로 검색 (성능↓) --> 데이터의 위치에 따라 성능이 들쑥날쑥함 (데이터량이 적을 때 사용)
int sdata = 70;
int pos=-1; // 초기값 : (-1 : 실패의 의미**)

  for (int i = 0; i < data.length; i++) {
    if (data[i] == sdata) {
        pos=i;
        break; // 반복문 탈출
     } // 순차검색 if_
   } // i_
   
// 출력
 if (pos != -1) {
     System.out.println("검색성공");
     System.out.println("pos = " + pos); // 6
  } else {
     System.out.println("검색실패");
} // 출력 if~else_

🔖 이진검색

데이터를 원소의 개수의 중앙에서부터 검색한다.
💡조건 : 오름차순 정렬이 우선되어야 사용할 수 있다.

반복 횟수를 예적하기 어렵기 때문에 for문을 사용하기 어려움

while문 사용 : 첫 조건은 반드시 실행(low high 조건실행)



int[] data = {10,20,30,40,50,60,70,80,90,100};

        int sdata=70; // 찾고자하는 수
        int low=0;
        int high=data.length-1; // 9
        int middle;
        int pos=-1;

        while (low <= high) {
            middle=(low+high)/2;
            if(data[middle] == sdata) {
                pos=middle;
                break;
            } else if (data[middle] < sdata) { // 중앙의 값 보다 찾고자하는 수가 더 클 경우
                low=middle+1; // low를 middle 뒤로 올린다.
            } else { // LEFT
                high=middle-1; // high를 middle 앞으로 내린다.
            } // if~else_
        } // while_
        // 출력
        if (pos != -1) {
            System.out.println("검색성공");
            System.out.println("pos = " + pos); // 6
        } else {
            System.out.println("검색실패");
        } // 출력 if~else_
profile
코린이 일기

0개의 댓글