728x90
선택 정렬(selection sort)은?
1. 주어진 데이터 중, 최소값을 찾음
2. 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함
3. 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복함
코드로 만들려면?
1. 데이터 두 개의 경우
data_list = [8, 2]
data_list[0] > data_list[1] 이므로 data_list[0]값과 data_list[1] 값을 교환
2. 데이터 세 개의 경우
data_list = [8, 2, 6]
처음 한 번 실행하면 2, 8, 6이 됨
두 번째 실행하면 2, 6, 8이 됨
3. 데이터 네 개의 경우
data_list = [8, 4, 3, 2]
처음 한 번 실행하면 2, 4, 3, 8이 됨
두 번째 실행하면 2, 3, 4, 8 됨
세 번째 실행하면 변화 없음
알고리즘 구현
1. for stand in range(len(data_list) - 1)로 반복
2. lowest = stand
3. for num in range(stand, len(data_list)) stand 이후부터 반복
내부 반복문 안에서 data_list[lowest] > data_list[num]이면
lowest = num
4. data_list[num], data_list[lowest] = data_list[lowest], data_list[num]
def selection_sort(data):
for stand in range(len(data) - 1):
lowest = stand
for index in range(stand + 1, len(data)):
if data[lowest] > data[index]
lowest = index
data[lowest], data[stand] = data[stand], data[lowest]
return data
import random
data_list = random.sample(range(100), 10)
selection_sort(data_list)
#출력결과 [9, 12, 13, 24, 53, 55, 69, 80, 87, 98]
알고리즘 분석
- 반복문이 두 개 O(n²)
- 실제로 상세하게 계산하면 n*(n-1) / 2
'IT개발 > 알고리즘, 우리 친해지자!' 카테고리의 다른 글
알고리즘 : 퀵 정렬(Quick sort) (0) | 2021.08.30 |
---|---|
알고리즘 : 동적계획법(Dynamic Programming)과 분할정복(Divide and Conquer) (0) | 2021.08.28 |
알고리즘 : 재귀 용법(recursive call) (0) | 2021.08.26 |
알고리즘 : 삽입 정렬(insertion sort) (0) | 2021.08.23 |
알고리즘 : 버블 정렬(Bubble sort) (0) | 2021.08.19 |