티스토리 뷰

알고리즘PS

[정렬]

현코로그 2021. 7. 22. 11:21

파이썬 기본 라이브러리: sort(), sorted()

  머지소트 + 삽입정렬

 

1. 선택정렬 

 - 매번 가장 작은 것을 선택

 - O(n^2)

 

array = []

for i in range(len(array):
	min_idx = i
    for j in range(i+1, len(array)): #끝까지 반복
    	if array[min_idx] > array[j]:
        	min_idx = j
    array[i], array[min_idx] = array[min_idx], array[i]

 

2. 삽입정렬

 - 필요할 때만 위치를 바꿈

 - 두 번째부터 정렬시작 + 뒤->앞

   현재 원소보다 앞의 원소들은 오름차순으로 정렬된 상태

   현재 원소보다 작은 원소를 만나면 그 위치에서 멈춤

 - O(n^2) ~ O(n)

    현재 리스트가 거의 정렬된 상태라면 good(비교만 하고 넘어가면 되니까)

array = []

for i in range(1, len(array):
	for j in range(i, 0, -1):
    	if array[j-1] > array[j]:
        	array[j], array[j-1] = array[j-1], array[j]
        else:
        	break

 

 

 

3. 퀵 소트

 - pivot을 설정. pivot 기준으로 크면 오른쪽, 작으면 왼쪽 리스트에 넣음. 리스트의 원소가 1개가 될때까지 과정 반복

 - pivot에 따라 성능차이. 

 - O(n^2) ~ O(nlogn)

   데이터가 무작위로 입력되는 경우에 good 

    cf) 삽입정렬과 반대

array = []

#recursion
def quick_sort(array):
	if len(array) <= 1:
    	return array
    
    pivot = array[0]
    search_arr = array[1:] #pivot제외 뒤
    
    left_arr = [x for x in search_array if x < pivot]
    right_arr = [x for x in search_array if x > pivot]
    
    return quick_sort(left_arr) + [pivot] + quicksort(right_arr)

 

 

4. 카운트 소트

 - 데이터의 크기가 제한된 정수형태(1,000,000) + 양수

 - O(n+k) 

    대신, 공간복잡도가 증가

 - 동일한 값을 가지는 중복 데이터가 많을수록 유리

 

array = []
sort_arr = [0]*(max(array)+1)

for e in array:
	sort_arr[e] += 1
    
for i in range(len(sort_arr)):
	for _ in range(sort_arr[i]):
    	print(i)
        
        
        
        
n = int(input())
sort_arr = [0 for _ in range(10001)]
largest = 0

for _ in range(n):
    tmp = int(input())
    sort_arr[tmp] += 1
    if tmp > largest:
        largest = tmp

for i in range(len(sort_arr[:largest+1])):
    if sort_arr[i] == 0:
        continue
    for _ in range(sort_arr[i]):
        print(i)

'알고리즘PS' 카테고리의 다른 글

[boj] 스택(stack)  (0) 2021.07.12
boj 파이썬 참고  (0) 2021.07.10
참고한 블로그  (2) 2021.07.07
프로그래머스 lv1  (0) 2021.07.06
프로그래머스 lv1  (0) 2021.07.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함