티스토리 뷰
싸피에서 알고리즘 스터디를 진행하게 되었다.
매주 한가지 알고리즘 주제에 대해서 공부하고 그 주제에 해당하는 문제를 풀어오는 형식이다.
첫주에는 정렬 알고리즘 중 특히, 선택, 삽입 , 퀵 , 계수 정렬에 대해서 공부해오기로 했다.
사실 내장 라이브러리에 있는 함수를 이용해 배열을 정렬하는 경우가 알고리즘 문제에 대부분인 것으로 알지만,
정렬 알고리즘에 대한 이해는 기본인 것 같다. 4가지 정렬에 대해서 정리해보겠다.
- 자바에서 제공되는 표준API에서 한 개의 추상메소드를 가지는 인터페이스는 모두 람다식을 이용해서 익명 구현 객체로 표현 가능
-선택 정렬: 모든 인덱스를 순회하며 제일 작은 수를 찾아 앞에 부터 정렬하는 알고리즘
장점: 자료 이동횟수가 미리 결정된다.
단점: 안정성 없음,
*안정정렬은 중복된 값(레코드)을 입력 순서와 동일하게 정렬하는 정렬 알고리즘의 특성(불안정정렬은 순서 보장못함)
-삽입 정렬: 두 번째 자료부터 시작하여 앞의 자료들과 비교하여 삽입할 위치를 찾는 작업을 반복하는 알고리즘
장점 : 안정한 정렬방법, 대부분 이미 정렬되어있는 경우 매우 효율적
단점 : 레코드 수와 크기가 클 경우 적합하지 않음.
-퀵 정렬 : 분할정복 알고리즘 이용하며 평균적으로 매우 빠른 수행속도의 성능이 나오는 정렬방법
*분할 정복(divide and conquer) 방법 :문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다.
장점: 속도가 빠름 O(nlogn)
단점: 정렬된 리스트에 대해서는 퀵정렬의 불균형 분할에 의해 오히려 수행시간이 많이 걸림
*불균형 분할을 방지하기 위해 피봇(기준 값)을 선택 할때, 리스트를 균등하게 분할 할 수 있도록 중간 값을 피벗으로 선택하는 등의 방법을 추가함
- 계수 정렬(Counting Sort): 모든 데이터를 한번씩 접근하면서 크기를 기준으로 갯수를 세서 정렬하는 알고리즘
장점 : O(n)의 시간복잡도를 갖음(레코드의 최대값이 크지 않을경우)
단점 : 일반적인 상황에서는 느리고 메모리 낭비가 심함. ex) 0,2,0,100,2,0 배열을 정렬하기 위해 누적합 배열의 길이를 100으로 잡는 낭비를 해야함.
Arrays.sort() 는 dual-pivot Quicksort 알고리즘을 사용하기 떄문에 평균 시간복잡도가 O(nlongn) 이기 떄문에 매우 빠른 알고리즘이지만 최악의 경우에는 O(n2) 이다.
하지만 Collections.sort() 는 Timsort알고리즘(합병 및 삽입정렬 섞은 알고리즘) 을 사용하는데 이는 최선의 경우 O(n) , 최악의 경우 O(nlogn)을 보장한다.
'Algorithm' 카테고리의 다른 글
프림 VS 다익스트라 알고리즘 (0) | 2021.09.26 |
---|---|
알고리즘 (트리,DFS,BFS,디버그) (0) | 2021.08.10 |
Integer 클래스 활용 (0) | 2021.04.28 |
자바 큰 수 범위를 표현하기 BigInteger 클래스 (0) | 2021.04.10 |
Arrays.sort(배열,Comparator ?) (0) | 2021.03.27 |
- Total
- Today
- Yesterday
- 스프링 기본 구조
- #web /was 구분이유
- 버팀목 국민은행
- 자바 코테 유용한 함수
- JAVA 코테
- Prim vs Dijkstra
- Optinal Chaining
- Property or method "" is not defined
- JAVA설치 #JDK #JRE
- 프로시저 #배치 #스케쥴러 #잡 #바인딩변수
- 프로그래머스 네트워크
- Java
- SQLD 후기
- 스프링 동작흐름 #ioc #di #dispatcherservlet
- 청년 버팀목 대출
- git branch strategy
- 스프링 동작흐름
- 부트스트랩 템플릿 사용시 충돌
- 알고리즘 나머지연산
- 코드리뷰 #클린코드
- 원자 원소 분자 차이점
- vue정리
- 왜 트랜스지방은 살 찜
- safe operator
- java 김영한 강의 #2chapter
- Netlify #CICD
- 나머지연산 분배법칙
- SSAFY 6기
- vue 특징
- 퍼블리싱 #앱에서 DB바로 안붙이는 이유
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |