순차탐색 / 이진탐색

UkJJang·2021년 9월 16일
0

탐색이란

  • 여러 데이터 중에서 원하는 데이터를 찾는 과정을 말한다.

순차탐색

  • 데이터를 맨 앞부터 순차적으로 원하는 데이터를 찾는 방법이다.
  • 시간 복잡도는 O(n)
import java.util.ArrayList;

public class SequentialSearch {

    public static void main(String[] args) {

        ArrayList<Integer> arr = new ArrayList<>();

        for (int i = 0; i < 100; i++) {
            arr.add((int) Math.random() * 100);
        }

        for (int i = 0; i < arr.size(); i++) {
            if (arr.get(i) == 5) {
                System.out.println("arr.get(i) = " + arr.get(i));
                break;
            }
        }
    }

}
  • 탐색할 자료를 둘로 나눠 찾을 데이터가 있을만한 곳을 찾는 과정
  • 순차탐색과는 다르게 데이터가 정렬되어 있어야 한다는 조건을 가진다.
  • 이진탐색도 분할정복의 형태다.
  • 시간복잡도는 O(logn)
import java.util.ArrayList;
import java.util.Collections;

public class BinarySearch {

    public boolean Search(ArrayList <Integer> arrayList, int searchData) {

        if (arrayList.get(0) == searchData && arrayList.size() == 1) {
            return true;
        } else if(arrayList.get(0) != searchData && arrayList.size() == 1) {
            return false;
        } else if (arrayList.size() == 0) {
            return false;
        }

        int mid = arrayList.size() / 2;

        if(searchData > arrayList.get(mid)) {
            Search(new ArrayList<>(arrayList.subList(mid, arrayList.size())),searchData);
        } else if (searchData < arrayList.get(mid)) {
            Search(new ArrayList<>(arrayList.subList(0, mid)),searchData);
        } else if (searchData == arrayList.get(mid)) {
            System.out.println("존재합니다.");
            return true;
        }

        return false;

    }

    public static void main(String[] args) {

        ArrayList<Integer> arr = new ArrayList<>();
        for (int i = 0; i < 100; i++) {

            arr.add((int) (Math.random() * 100));

        }
        Collections.sort(arr);
        System.out.println("arr = " + arr);
        BinarySearch binarySearch = new BinarySearch();
        binarySearch.Search(arr, 5);

    }

}
profile
꾸준하게 성실하게

0개의 댓글