1. 선택 정렬(Selection Sort)의 기본 개념
2. 선택 정렬의 예시와 원리 파악
3. 실제 코드 구현 및 예시를 통한 이해
1. 선택 정렬(Selection Sort)의 기본 개념
선택 정렬(Selection Sort)를 간단하게 정의하면, 주어진 데이터 중 최소값을 찾아서, 계속 맨앞으로 위치를 바꾸면서 순서를 바꾸는 방법입니다.
그림을 보면서 이해하면 더 쉽게 이해할 수 있습니다.
(출처: en.wikipedia.org/wiki/Selection_sort)
위의 사진에서 보이는 것처럼 주어진 숫자 중 3이 가장 최소값이어서 자리를 바꾼다면 6과 자리를 바꾸게 되겠죠. 이런식으로 하나하나 계속 비교하면서 자리를 찾아가는 방법입니다.
기본 개념을 3단계로 요약하면 다음과 같습니다.
1단계. 주어진 데이터 중, 최소값을 찾습니다.
2단계. 최소값을 맨 앞으로 이동합니다.
3단계. 맨 앞 데이터를 제외한 나머지 데이터들에게 동일한 반복을 시행합니다.
2. 선택 정렬의 예시와 원리 파악
(1) 선택 정렬의 예시: 리스트 [9, 4, 2, 1]의 경우
첫 번째 시행의 경우
최소값은 1이니까 위치는 맨앞으로 이동하고, 그 결과는 1, 4, 2, 9가 됩니다.
두 번째 시행의 경우
최소값은 2가 되고 4와 위치가 바뀌게 되겠죠. 그래서 결과는 1,2,4,9로 이동하게 되고 정렬은 끝나게 됩니다.
(2) 손 코딩을 통한 원리 파악
원리1. 최대 반복 회수는 n - 1번
원리 2. 초기 최소값을 지정한다.
원리 3. 나머지 숫자 중 초기 최소값과 비교하여 더 작은 숫자가 있으면 초기 최소값과 위치를 바꾼다.
3. 실제 코드 구현 및 예시를 통한 이해
1
2
3
4
5
6
7
8
9
10
11
|
def selection_sort(data):
for stand in range(len(data)-1):
lowest = stand
for num in range(stand+1, len(data)):
if data[num] < data[lowest]:
lowest = num
data[stand], data[lowest] = data[lowest], data[stand]
return data
|
cs |
위의 코드는 손코드로 구성한 논리를 단순히 코드로 옮겨놓은 것뿐입니다.
항상 강조드리지만, 손코드와 미리 논리를 구상한 것과 안 한 것은 정말 하늘과 땅 차이의 결과를 만들어 낼 것입니다.
위의 코드로 실제로 정렬을 해보도록 하겠습니다.
초기 난수로 생성된 10개의 리스트 숫자들이, selection sort 함수로 인해서 자연스럽게 정렬된 모습을 볼 수 있습니다.
따라서 이러한 코드를 작성해보는 연습을 하시다보면, 자신만의 알고리즘을 만드는데 익숙해지실 것이라 생각합니다.
'Python > 알고리즘' 카테고리의 다른 글
고급정렬2. 퀵정렬(Quick Sort) 완벽 마스터하기 (0) | 2021.01.06 |
---|---|
고급정렬1. 병합정렬(Merge Sort) 완벽 마스터하기 (0) | 2021.01.04 |
동적 계획법(DP)과 분할 정복 마스터하기 (0) | 2021.01.01 |
재귀함수의 완벽 이해 및 구현(Recursive Function) (0) | 2020.12.31 |
기본 정렬2. 삽입 정렬(Insertion Sort) (0) | 2020.12.29 |