탐색이란
- 여러 데이터 중에서 원하는 데이터를 찾는 과정을 말한다.
순차탐색
- 데이터를 맨 앞부터 순차적으로 원하는 데이터를 찾는 방법이다.
- 시간 복잡도는 O(n)
이진탐색 (Binary Search)
- 탐색할 자료를 둘로 나눠 찾을 데이터가 있을만한 곳을 찾는 과정
- 순차탐색과는 다르게 데이터가 정렬되어 있어야 한다는 조건을 가진다.
- 이진탐색도 분할정복의 형태다.
- 시간복잡도는 O(logn)
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; } } } }
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); } }