[알고리즘, 자료구조] 선형검색 (SeqSearch)

2024. 6. 19. 00:46WebBack/알고리즘

응용 프로그램 : 배열 앞에서 순서대로 입력된 값을 검색하여 찾는 프로그램
종료 조건 : 
1) 검색할 값을 발견하지 못하고 배열의 끝을 지나간 경우
2) 검색할 값과 같은 요소를 발견한 경우

 

구현 방법:
1. 요솟값을 입력받는다. 
2. 각 배열에 저장될 값을 랜덤으로 입력한다. (for문, random rand = new Random() 이용)
3. 검색할 값을 입력받는다. 
4. 배열, 요솟값, 검색값을 매개 변수로 하는 클래스 메서드 구현
5. 클래스 메서드 실행

 

출력 예시:
------------
요솟수: 7
x[0] : 6
x[1] : 4
x[2] : 3
x[3] : 2
x[4] : 1
x[5] : 2
x[6] : 8
검색할 값: 2
그 값은 4번째 위치에 있습니다. 
-------------

 


구현 결과

package Algorithm;

import java.util.Random;
import java.util.Scanner;

public class SeqSearch {
  static int seqSearch(int[] x, int n, int key){
    int i = 0;
    //key값을 찾는 무한반복문
    while(true){
      if(i == n) return -1; // 종료 조건 1
      if(x[i] == key) return i; //종료 조건 2
      i++;
    }
  }

  public static void main(String[] args) {
    //요솟값을 입력받는다.
    Scanner sc = new Scanner(System.in);
    System.out.print("요솟수 : ");
    int n = sc.nextInt();

    //요솟수만큼의 길이를 가진 배열 형성
    int[] x = new int[n];

    //각 배열에 값 넣기
    for(int i = 0; i < x.length; i++){
      Random rand = new Random();
      x[i] = rand.nextInt(8) + 1; //rand는 0에서 8사이의 값 -> 1에서 9사이의 값
      System.out.printf("x[%d] = %d\n", i, x[i]);
    }

    System.out.print("검색할 값: ");
    int key = sc.nextInt();

    //검색 시작
    int idx = seqSearch(x, n, key);

    if(idx == -1)
      System.out.println("값이 존재하지 않습니다.");
    else
      System.out.printf("그 값은 x[%d]의 위치에 있습니다.", idx);
  }
}

 

문제점 

1) key값을 검색할 때에 if를 두 번 검색해야함

2) key값이 여러개 존재해도 모두 반환하지 않음