일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Heap
- 정렬
- 디자인패턴
- 프로세스
- 코스닥
- 렌더링파이프라인
- SQLD
- c#
- 버텍스 쉐이더
- 운영체제
- SQL시험
- 주식
- HDRP
- URP
- 유니티 최적화
- 픽셀 쉐이더
- unity
- 코스피
- 유니티
- 네트워크
- SQL
- 자료구조
- vertex shader
- 쉐이더
- 스레드
- TCP
- 배칭
- 멀티스레드
- SRP
- 통신
Archives
- Today
- Total
반응형
Let's Girin!
[자료구조&알고리즘] 선택 정렬 본문
1. 선택 정렬
선택 정렬은 리스트를 순차적으로 탐색하여 가장 작은 또는 가장 큰 요소를 선택하고, 이를 정렬되지 않은 부분의 첫 번째 요소와 교환하는 과정을 반복한다. 이렇게 하면 리스트의 정렬되지 않은 부분이 점점 줄어들고, 결국 리스트 전체가 정렬된다.
선택 정렬의 시간 복잡도는 O(n^2)이다. 이는 두 개의 중첩된 반복문으로 인해 발생하는데 첫 번째 반복문은 리스트의 모든 요소를 반복하며, 두 번째 반복문은 나머지 요소들 중에서 최소값을 찾는다. 선택 정렬은 정렬된 상태와 상관없이 항상 동일한 시간 복잡도를 가지므로, 데이터의 초기 상태에 크게 영향을 받지 않는다.
2. 구현 방식
2.1 주어진 리스트에서 최소값을 찾습니다.
2.2 그 최소값을 리스트의 첫 번째 요소와 교환합니다.
2.3 리스트의 첫 번째 요소를 제외하고 나머지 리스트에서 다시 최소값을 찾아 두 번째 요소와 교환합니다.
2.4 이 과정을 리스트 끝까지 반복합니다.
3. 문제 예제
3.1 백준 2750번
https://www.acmicpc.net/problem/2750
3.1.1 구현 방식
#include <iostream>
#include <vector>
using namespace std;
void SelectionSort(vector<int>& A)
{
int n = A.size();
//마지막 요소는 자동으로 제자리에 있기 때문에 비교할 필요가 없다.
//따라서 n-1 까지 반복한다.
for (int i = 0; i < n - 1; i++)
{
int min = i;
for (int j = i + 1; j < n; j++)
{
if (A[j] < A[min])
min = j;
}
swap(A[min], A[i]);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
vector<int> A(N);
for (int i = 0; i < N; i++)
{
cin >> A[i];
}
SelectionSort(A);
for (const int& num : A)
{
cout << num << endl;
}
}
반응형
'Data Structures & Algorithms' 카테고리의 다른 글
[자료구조&알고리즘] 씬 탐색부터 AI FSM까지, 게임 속 트리 구조의 모든 것 (0) | 2025.04.12 |
---|---|
[자료구조&알고리즘] 퀵 정렬 (0) | 2024.05.29 |
[자료구조&알고리즘] 버블 정렬 (1) | 2024.05.28 |
[자료구조&알고리즘] 트리(Tree) (1) | 2024.02.03 |
[자료구조&알고리즘] DFS(Depth First Search) (0) | 2023.10.17 |