반응형
선택 정렬은 배열의 정렬되지 않은 부분에서 최소 요소를 반복적으로 찾아 배열의 정렬된 부분의 시작 부분으로 이동하여 배열 또는 목록을 정렬하는 간단한 정렬 알고리즘입니다.
선택 정렬 알고리즘의 단계는 다음과 같습니다:
- 배열의 첫 번째 요소를 최소값으로 설정합니다.
- 두 번째 요소부터 시작하여 각 요소를 최소값과 비교합니다.
- 요소가 최소값보다 작으면 이를 새로운 최소값으로 설정합니다.
- 배열의 끝에 도달할 때까지 이 과정을 계속합니다.
- 최소값을 배열의 정렬되지 않은 부분의 첫 번째 요소와 바꿉니다.
- 배열의 나머지 정렬되지 않은 부분에 대해 2~5단계를 반복합니다.
- 이제 배열이 정렬되었습니다.
다음은 정수 배열에서 선택 정렬이 어떻게 작동하는지 보여주는 시각화입니다
원래 배열: 7 3 5 2 8 4 1 6
1을 통과시킵니다:
최소 요소는 1입니다. 첫 번째 요소로 바꿉니다.
1 3 5 2 8 4 7 6
2를 통과시킵니다:
최소 요소는 2입니다. 두 번째 요소와 교환합니다.
1 2 5 3 8 4 7 6
패스 3:
최소 요소는 3입니다. 세 번째 요소로 바꿉니다.
1 2 3 5 8 4 7 6
4를 통과합니다:
최소 원소가 4입니다. 네 번째 원소로 바꿉니다.
1 2 3 4 8 5 7 6
5를 통과합니다:
최소 원소가 5입니다. 다섯 번째 원소로 바꿉니다.
1 2 3 4 5 8 7 6
6을 통과합니다:
최소 원소가 6입니다. 여섯 번째 원소로 바꿉니다.
1 2 3 4 5 6 7 8
정렬된 배열은 1 2 3 4 5 6 7 8입니다.
선택 정렬은 시간 복잡도가 O(n^2)이므로 큰 배열에서는 비효율적입니다. 하지만 이해하고 구현하기 쉽다는 장점이 있습니다.
def selection_sort(arr):
n = len(arr)
for i in range(n):
# Find the minimum element in the unsorted part of the array
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
# Swap the minimum element with the first element of the unsorted part of the array
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
이 함수를 사용하기 위해 간단하게 아래 처럼 사용 할 수 있습니다
arr = [7, 3, 5, 2, 8, 4, 1, 6]
sorted_arr = selection_sort(arr)
print(sorted_arr) # Output: [1, 2, 3, 4, 5, 6, 7, 8]
반응형
'Algorithm' 카테고리의 다른 글
자바를 활용한 다이나믹 프로그래밍 (0) | 2023.03.23 |
---|---|
자바와 함께 사용하는 그래프 알고리즘 (Graph Algorithms with Java) (1) | 2023.03.23 |
Java를 이용한 검색 알고리즘 (0) | 2023.03.23 |
정렬 알고리즘 -삽입 정렬 - insertion sort (0) | 2023.02.28 |
정렬 알고리즘 - 버블 정렬 - Bubble sort (0) | 2023.02.28 |
댓글