선택 정렬이란 말이죠
2024. 10. 16. 00:59ㆍ알고리즘
선택 정렬(Selection Sorting)
삽입 정렬의 많은 데이터 이동량을 보완해 줄 정렬 알고리즘이다.
한 번에 하나의 자료를 선택해 해당 위치에 배정하는 정렬 방식을 사용한다.
리스트를 사용하면 포인터에 의해 데이터 이동을 없앨 수 있다.
선택 정렬 또한 카드게임에 비유해 설명해 보자
게임에 필요한 카드가 모두 손에 있는 상황에서, 카드를 크기 순으로 정렬하려 한다.
그 카드를 전부 살펴보고 가장 큰 값을 가장 오른쪽에 배치한다.
이후 그 다음 큰 값을 그 다음 오른쪽에 배치한다.
이 과정을 모든 카드가 정렬될 때까지 수행한다. (반대의 경우는 작은 값부터 왼 쪽에 정렬한다)
즉 선택 정렬의 수행 과정은 데이터 A[i], ..., A[n] 중 가장 작은 키 값을 갖는 데이터를 선택해 A[i]과 교환한다.
이런 단계를 계속하면 최종적으로 정렬된 리스트를 얻을 수 있다.
이 방법에선 최소(최대)의 데이터를 반복적으로 선택하므로 선택 정렬이라는 이름이 부여되었다.
1. 최대값(최소값) 찾아
2. 찾은 데이터와 맨 뒤(앞)에 데이터와 바꿈
3. 최대값(최소값) 찾아
4. 찾은 데이터와 맨 뒤(앞)에서 두 번째 데이터와 바꿈
...
n. 데이터 정렬 완료
작성
다음은 입력 데이터 크기가 n인 경우에 선택 정렬 알고리즘을 구현하였다.
1부터 n-1까지의 모든 i에 대하여 A[i], ..., A[n] 중의 최소 데이터와 A[i]를 교환한다
void selction_sort()
{
int i, j, min;
int temp;
for (int i = 0; i < SIZE; i++)
{
// 1. 최소값 찾기
min = i;
for (int j = i+1; j < SIZE; j++)
{
if (L[j] < L[min]) min = j;
}
// 2. L[i], L[min] 교환
temp = L[min];
L[min] = L[i];
L[i] = temp;
}
}
인덱스 i가 입력 데이터를 따라 왼쪽에서 오른쪽으로 이동할 때, 인덱스 i의 왼쪽에 위치한 데이터들은 완전히 정렬된 상태가 된다.
특징
한 번 선택되어 이동한 자료는 재이동 없음 (삽입 정렬의 단점 보완)
수행 시간(On^2): 최상/최악/평균 모두 동일
비교 횟수
입력 데이터에서 최소값을 찾기 위해 (n-1)번 원소 값을 비교하게 된다.
따라서 총 비교 횟수는 (n-1) + (n-2) + ... + 1 = n(n-1)/2이며, 비교의 수행 시간은 O(n^2)이 된다.
'알고리즘' 카테고리의 다른 글
삽입 정렬..이란 말이죠... (0) | 2024.10.11 |
---|---|
정렬..이란 말이죠... (2) | 2024.10.11 |
알고리즘이란..말이죠... (0) | 2024.10.11 |