정렬이란?
💡원소들의 크기에 따라 순서를 배치하는 것
- 내림차순: 크기가 증가하는 순으로 원소들을 배치하는 것
- 오름차순: 크기가 감소가는 순으로 원소들을 배치하는 것
선택정렬(Selection Sort)
💡리스트를 반복적으로 순회하며 현재 위치에 맞는 값을 선택하여 제자리에 놓는 방식
동작방식
- 초기상태
- 첫번째 반복
- 두번째 반복
- 반복
- 종료
구현
#include <iostream>
using namespace std;
int main(){
int arr[] = {8, 3, 2, 5, 1, 1, 2, 5, 8, 9};
int size = sizeof(arr) / sizeof(arr[0]);
// 선택정렬
for (int i = 0; i < size - 1; i++) { // 좌측부터 하나의 위치 기준
for (int j = i + 1; j < size; j++) { // 크기 비교해서 교체 여부 판단
if (arr[i] > arr[j]) {
swap(arr[i], arr[j]);
}
}
}
}
의의
선택정렬은 정렬 알고리즘에서는 구현이 간단하지만 성능은 떨어진다. 하지만 학습 용도로 swap 연산, 인덱싱을 연습하기에는 좋다.
std::swap(int a, int b); // a 와 b의 값을 교환
std::min(int a, int b); // a와 b의 값 중에 최소값을 반환
시간복잡도
💡 O(N^2)
안정성에 따른 정렬의 분류
정렬은 같은 값일 경우 순서가 유지되는 지 여부에 따라 안정한 지 여부로 분류할 수 있다. 정렬하는 와중에 값이 동일한 다른 두 원소의 순서가 바뀌는 경우에는 불안정하다고 하고 순서가 유지되는 경우에는 안정하다고 한다.