내 생각/강의
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 12
호랑구야
2023. 6. 30. 09:00
* 수업은 JS 기반이지만 Python으로 구현
Section 12
선택 정렬: 소개
버블 정렬과 비슷하지만, 작은 값을 한 번에 하나씩 위치에 배열하는 방법이다. swap하는 횟수가 버블보다 적기때문에 메모리 활용면에서 더 낫기는 하지만, 일반적으로는 아주 좋지 않으며 쉽다는 장점을 가지고 있다. 몇몇 알고리즘의 준비 단계가 된다.
선택 정렬: 구현
- 최솟값을 저장할 변수 선언하고 처음에는 배열의 첫 요소와 같게 설정한다.
- 다음 요소와 비교하여 무엇이 더 작은지 비교한다.
- 다음 요소와 비교하여 더 작은 경우 그것을 최솟값으로 갱신하고, 이 행위를 배열의 끝까지 수행한다.
- 만약 최솟값이 처음과 같지 않다면, 처음것과 위치를 바꾼다.
- 다음 요소부터 위의 과정을 정렬이 다 될 때까지 반복한다.
# Selection Sort
def Select(arr):
# i번째 요소를 Min으로 두고 나머지 요소와 비교하여
# 더 작은 것을 Min으로 배정
for i in range(len(arr)):
# 최솟값 위치를 루프 내 배열 첫 번째 요소로 배정
lowest = i
for j in range(i+1, len(arr)):
# 잘 수행되는지 확인하는 부분
print(i, j, lowest, arr[lowest])
# 배열의 최솟값 위치와 배열 j번째 비교하여 후자가 더 작다면
# lowest값을 j로 바꾼다
if arr[lowest] > arr[j]:
lowest = j
# swap
# 루프 내 배열 첫 번째 값과 배열 lowest번 째 값을 서로 교환
if i != lowest:
arr[i], arr[lowest] = arr[lowest], arr[i]
# 잘 수행되는지 확인하는 부분
print(arr)
# 정렬된 배열 return
return arr
Select([33, 14, 223, 54, 21, 9, 0, 14])
Select([1, 2, 9, 13, 15, 6, 8])
선택 정렬: 빅오 복잡도
- 시간복잡도
- Best: O(n^2)
- Average: O(n^2)
- Worst: O(n^2)
- 공간복잡도
- O(1)
반응형