Computer science/Algorithm

정렬

잔망루피 2020. 1. 31. 21:37

안녕하세요 : ) 오늘은 정렬에 대해 알아볼게요

 

정렬은 다수의 자료를 특정 기준에 의해 작은 값부터 큰 값(ascending) 또는 그 반대의 순서(descending)로 재배열하는 것이다.

정렬의 예는 다음과 같다.

버블정렬(Bubble Sort), 카운팅정렬(Counting Sort), 선택정렬(Selection Sort), 퀵정렬(Quick Sort), 삽입정렬(Insertion Sort), 병합정렬(Merge Sort)가 있다.

이 정렬알고리즘들을 비교하기 위해 간단하게 표로 나타내겠다.

 

알고리즘 평균수행시간 최악수행시간 기법 비고
버블정렬 O(n^2) O(n^2) 비교와 교환 코딩이 가장 쉬움.
카운팅정렬 O(n+k) O(n+k) 비교환 n이 비교적 작을때만 가능.
선택정렬 O(n^2) O(n^2) 비교와 교환 교환의 횟수가 버블, 삽입보다 작음.
퀵정렬 O(nlogn) O(n^2) 분할정복 최악의 경우O(n^2)이지만 평균적으로 가장 빠름.
삽입정렬 O(n^2) O(n^2) 비교와 교환 n의 개수가 작을 때 효과적임.
병합정렬 O(nlogn) O(nlogn) 분할정복 연결리스트의 경우 가장 효율적인 방식.

 

  • 안정 정렬(Stabale Sort) : 중복된 값은 입력 순서와 동일하게 정렬. 삽입정렬, 병합정렬, 버블정렬
  • 불안정 정렬(Unstable Sort) : 안정 정렬과 반대. 퀵 정렬, 선택정렬

 

파이썬의 정렬은 안정 정렬, 자바는 불안정 정렬

public static <T> void sort(T[] a,
                            int fromIndex,
                            int toIndex,
                            Comparator<? super T> c)

자바의 안정 정렬

 

 

참고👇

https://hongl.tistory.com/9

 

안정 정렬 vs 불안정 정렬

KTX 역에서 도착역과 출발 시간으로 이루어진 다음과 같은 데이터가 있다고 가정해 봅시다. [(대구, 1400), (순천, 1500), (대구, 1430), (부산, 1300), (목포, 1400), (대구, 1500)] 지역명으로 오름차순으로 정

hongl.tistory.com

 

반응형

'Computer science > Algorithm' 카테고리의 다른 글

부분집합  (0) 2020.02.22
2차원 List  (0) 2020.02.01
Greedy Algorithm(탐욕 알고리즘)  (0) 2020.01.28
Exhausitive Search(완전 검색)  (0) 2020.01.28
파이썬 자료형 : tuple, list, dictionary, set  (0) 2020.01.27