728x90
가장 작은 (혹은 가장 큰) 원소를 선택해 앞으로 옮기는 방식입니다.
시간 복잡도는 O(n^2)으로 비효율적입니다.
#include <iostream>
// 배열을 출력하는 함수
void printArray(int arr[], int size) {
for (int i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
// 선택 정렬 함수
void selectionSort(int arr[], int size) {
for (int i = 0; i < size - 1; ++i) {
// 최솟값의 인덱스를 저장할 변수
int minIndex = i;
// 최솟값 탐색
for (int j = i + 1; j < size; ++j) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 최솟값을 현재 위치로 이동
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int size = sizeof(arr) / sizeof(arr[0]);
std::cout << "정렬 전 배열: ";
printArray(arr, size);
selectionSort(arr, size);
std::cout << "정렬 후 배열: ";
printArray(arr, size);
return 0;
}
이 코드는 선택 정렬 알고리즘을 구현하고, 주어진 배열을 정렬한 뒤 결과를 출력합니다.
코드를 실행하면 정렬되지 않은 배열이 정렬된 상태로 출력됩니다.
정렬 전 배열: 64 25 12 22 11
정렬 후 배열: 11 12 22 25 64
이 출력은 배열이 선택 정렬을 통해 어떻게 오름차순으로 정렬되는지 보여줍니다.
코드의 'selectionSort' 함수에서 배열의 각 위치를 순회하면서 그 위치 이후의 최솟값을 찾고,
그 최솟값을 현재 위치로 이동시키는 과정을 반복합니다.
이렇게 하면 배열의 앞부분부터 차례대로 최솟값이 정렬되어 배열이 오름차순으로 정리됩니다.
마무리
선택 정렬은 매우 직관적이지만, 데이터의 양이 많을 때는 효율적이지 않습니다.
각 단계마다 전체 배열을 다시 검사하기 때문에 시간 복잡도는 'O(n^2)'으로,
데이터가 많아질수록 성능이 크게 저하됩니다.
그럼에도 불구하고 구현이 간단해서 정렬 알고리즘을 배울 때 자주 사용됩니다.
728x90
반응형
'Application > 기초' 카테고리의 다른 글
[기초] C++ 알고리즘 : 병합 정렬 (Merge Sort) (0) | 2024.05.07 |
---|---|
[기초] C++ 알고리즘 : 삽입 정렬 (Insertion Sort) (0) | 2024.05.06 |
[기초] C++ 알고리즘 : 버블 정렬 (Bubble Sort) (0) | 2024.05.04 |
[기초] C++ 반복자 (Iterator) (0) | 2024.05.03 |
[기초] C++ 컨테이너 (Containers) (0) | 2024.05.02 |