반응형
오름차순으로 정렬하기 위해 2중 for문을 이용합니다.
행렬의 i 위치보다 작은 값중에 가장 작은 값을 (i+1)~(size-1)위치에서 찾아, i위치와 교환(Swap) 합니다.
시간복잡도는 삽입정렬이나 버블정렬과 같이 빅오 n제곱을 갖습니다.
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 500
int ar[MAX];
void Swap(int idx1, int idx2)
{
int tmp = ar[idx1];
ar[idx1] = ar[idx2];
ar[idx2] = tmp;
}
void SelectionSort(int size)
{
for (int i = 0; i < size - 1; i++)
{
int idx = i, min = ar[i];
for (int j = i + 1; j < size; j++)
{
if (min > ar[j])
{
min = ar[j];
idx = j;
}
}
if (i != idx)
Swap(i, idx);
}
}
int main()
{
int n; cin >> n;
for (int i = 0; i < n; i++)
{
cin >> ar[i];
}
SelectionSort(n);
for (int i = 0; i < n; i++)
{
cout << ar[i] << ' ';
}
cout << endl;
return 0;
}
반응형
'개발 > 알고리즘 & 자료구조' 카테고리의 다른 글
백준(BOJ) 1406번 에디터 (0) | 2021.08.02 |
---|---|
백준(BOJ) 11728번 배열 합치기 (0) | 2021.08.02 |
비트마스크(Bitmask) (0) | 2021.08.02 |
O(n+k) 정렬 - 카운팅 정렬(Counting Sort) (0) | 2021.08.02 |
STL(algorithm의 Sort) 활용 - Baby Gin 판별기 (0) | 2021.05.12 |