정렬(3)
-
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.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