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