알고리즘(5)
-
1.4 정렬 - 퀵 정렬 (Quick sort)
삽입정렬, 버블정렬, 선택정렬은 모두 시간복잡도가 O(n^2)를 가지고 있다. O(n^2)의 시간복잡도는 데이터의 갯수가 10만개일 때 100억번의 연산을 할 수 도 있기 때문에, 데이터가 많으면 사용하기 어렵다. 따라서 더 작은 시간복잡도의 알고리즘이 필요하다. 퀵정렬 - 대표적인 분할정복 알고리즘 시간복잡도 = O(N*logN) 특정한 값(pivot)을 기준으로 큰 값과 작은 값으로 나누어 교환한 뒤, 배열을 반으로 나누어 정렬 ex) int[] arr = {6, 7, 3, 2, 5, 8, 1, 4}; -> (오름차순 정렬) arr[0] -> pivot {일반적으로 가장 앞의 값을 피벗으로 설정} {6, 7, 3, 2, 5, 8, 1, 4} -> arr[1] ~ arr[end] 피벗보다 큰 수 탐색 ..
2021.05.31 -
1.3 정렬_삽입정렬
삽입정렬 : 앞의 배열에서 크기를 비교 후 적절한 위치에 삽입(오름차순) 시간복잡도 : O(N^2) 버블, 선택정렬은 이미 정렬이 되어 있어도, 반복문을 수행함. 버블, 선택정렬과 달리 필요할 때만 정렬의 위치를 바꿈. 현재 정렬에서 이전 배열이 정렬되었다고 가정 이전 배열의 적절한 위치에 삽입 ex) int[] arr = {9, 1, 3, 4, 5, 6, 2, 8, 7}; - 오름차순 정렬 { _, 9, _ } -> 1 삽입 -> { 1, 9 } { _, 1, _, 9, _ } -> 3 삽입 -> { 1, 3, 9 } { _, 1, _, 3, _, 9, _ } -> 4 삽입 -> { 1, 3, 4, 9 } . . . . 반복 arr = {1, 2, 3, 4, 5, 6, 7, 8, 9} 1 2 3 4 5..
2021.05.28 -
1.2 정렬_버블정렬
버블정렬 : 가장 작은 값을 선택해서 제일앞으로 보내는 알고리즘(오름차순) 시간복잡도 : O(N^2) 직관적이고 구현하기 쉽지만 가장 효율성이 떨어지는 알고리즘 ex) int[] arr = {1, 3, 4, 5, 6, 2, 8, 7}; - 오름차순 정렬 (1, 3) 비교 (3, 4) 비교 (4, 5) 비교 (5, 6) 비교 (6, 2) 비교 -> (2, 6) . . . . 반복 arr = {1, 2, 3, 4, 5, 6, 7, 8} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class Blog { public static void main(String[] args) { int[] arr = { 1, 3, 4, 5, 6, 2, 8, 7 }; int t..
2021.05.28 -
1. 알고리즘 - 시간복잡도
1. 시간복잡도? 시간복잡도는 알고리즘의 성능을 분석되는데 사용되는 방법 프로그램의 입력값과 연산 수행 시간의 상관관계를 나타내는 척도 절대적인 수행 시간은 컴퓨터마다 다르다. 1.1 입력(Input)값의 예시 배열(array) -> 배열의 크기(size of array) 그래프(graph) -> 정점과 간선의 개수 1.2 시간복잡도의 종류 1. Every-Case Time Complexity ( 𝑇(𝑛) ) 입력 크기 n 이 입력됐을 때, 알고리즘이 연산을 수행하는 횟수 입력 크기에만 종속되며, 어떤 입력값이 들어오더라도 일정하다. 2. The Worst Case Time Complexity( 𝑊(𝑛) ) 입력크기 n 이 주어졌을 때, 알고리즘이 연산을 수행하는 최대 횟수 입력크기와 입력값 모두에 종속..
2021.05.27 -
1.1 정렬_선택정렬
선택정렬 : 가장 작은 값을 선택해서 제일앞으로 보내는 알고리즘(오름차순) 시간복잡도 : O(N^2) ex) int[] arr = {1, 3, 4, 5, 6, 2, 8, 7}; - 오름차순 정렬 arr[0]~arr[arr.lenth-1] 까지 최소 값을 찾아서 arr[0]와 스와프 arr[1]~arr[arr.lenth-1] 까지 최소 값을 찾아서 arr[1]와 스와프 . . . . 반복 arr = {1, 2, 3, 4, 5, 6, 7, 8} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Blog { public static void main(String[] args) { int[] arr = { 1, 3, 4, 5,..
2021.05.27