[알고리즘] 선택 정렬 (Selection Sort)
- Archive2/Algorithm
- 2021. 4. 24.
반응형
* 다음 포스팅은 개인적인 공부 내용을 기록한 것으로, 잘못된 내용이 있을 수 있습니다.
- 선택정렬[Selection Sort] 알고리즘이란?
- 선택정렬 예시
- #선택정렬 C언어 구현코드
#선택 정렬[Selection Sort] 알고리즘 이란?
선택 정렬은 기초가 되는 정렬 알고리즘 중 하나로, "가장 작은 값을 탐색하여 맨 앞의 데이터와 교환해 나가는 아이디어"를 이용한 알고리즘이다. 시간복잡도는 모든 상황에서 O(N^2)으로 , 다른 정렬 알고리즘에 비해서 매우 비효율적이다.
배열에 3 5 2 8 7 이 저장되어 있다고 가정하고 선택 정렬 알고리즘을 이용해 오름차순으로 정렬해 보도록 하자.
#선택 정렬[Selection Sort] 예시
[탐색 1] 첫 번째 인덱스 3과 나머지 자료(2번째 ~ 5번째)를 비교하여 가장 작은 값 (2)를 찾아 스왑한다.
[탐색 2] 두 번째 인덱스 5와 나머지 자료(3번째 ~ 5번째)를 비교하여 가장 작은 값 (3)을 찾아 스왑한다.
[탐색 3] 최솟값(5)이 자기 자신(5)과 일치하기에 스왑하지 않는다.
[탐색 4] 네 번째 인덱스 8과 나머지 자료 (5번째)를 비교하여 가장 작은 값(7)을 찾아 스왑한다.
#선택 정렬 C언어 구현코드
#include <stdio.h>
int arr[5] = {3, 5, 2, 8, 7};
int index,temp;
int main()
{
// 정렬 전
printf("BEFORE\n");
for (int i = 0 ; i < 5 ; ++i)
{
printf("%d ", arr[i]);
}
// Selection Sort
for (int i = 0 ; i < 5 ; ++i)
{
int min = arr[i];
for ( int j = i + 1 ; j < 5 ; ++j)
{
if (min > arr[j]){
min = arr[j];
index = j;
}
}
temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
// 정렬 후
printf("\nAFTER\n");
for (int i = 0 ; i < 5 ; ++i)
{
printf("%d ", arr[i]);
}
}
반응형
'Archive2 > Algorithm' 카테고리의 다른 글
[GameAlgorithm] 미로 생성 알고리즘 _ Binary Tree Maze Algorithm (1) | 2021.08.22 |
---|---|
[알고리즘] Dynamic Programming (동적 계획법, DP) (2) | 2021.07.25 |
[DataStructure] 동적 배열 (Dynamic Array) (2) | 2021.07.03 |
[알고리즘] 이진 탐색 알고리즘 (Binary Search Algorithm) (0) | 2021.05.14 |
[알고리즘] 선형 탐색 알고리즘 (Linear Search Algorithm) (0) | 2021.05.13 |