#include <string>
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int count;
cin >> count;
int* num = new int[count];
for (int i = 0; i < count; i++) {
int a;
cin >> a;
num[i] = a;
}
int minidx,temp;
for (int i = 0; i < count - 1; i++) {
int min = num[i];
for (int j = i + 1; j < count; j++) {
if (min > num[j]) {
min = num[j];
minidx = j;
}
}
if (minidx != 0) {
temp = num[i];
num[i] = num[minidx];
num[minidx] = temp;
minidx = 0;
}
}
for (int i = 0; i < count;i++) {
cout << num[i] << endl;
}
}
선택정렬
배열을 돌면서 첫번째 값과 최소값을 바꾼다.
바꾸고 난 이후에는 두번째 값과 최소값을 바꾸고 세번째 값과 최소값을 바꾼다. 이 과정을 반복한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main() {
int count;
cin >> count;
int* num = new int[count];
for (int i = 0; i < count; i++) {
int a;
cin >> a;
num[i] = a;
}
int temp;
for (int i = 0; i < count - 1; i++) {
for (int j = 1; j < count - i; j++) {
if (num[j - 1] > num[j]) {
temp = num[j];
num[j] = num[j - 1];
num[j - 1] = temp;
}
}
}
for (int i = 0; i < count;i++) {
cout << num[i] << endl;
}
}
버블정렬
i=0일때 처음 요소와 다음 요소를 비교해서 더 큰 값을 뒤로 보내고 이것을 반복한다.
j루프를 한번 돌면 가장 큰 값이 자동으로 맨 뒤로가기 때문에 j 루프는 count에서 i를 뺀만큼만 돈다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main() {
int count;
cin >> count;
int* num = new int[count];
for (int i = 0; i < count; i++) {
int a;
cin >> a;
num[i] = a;
}
int temp,i,j;
for (i = 1; i < count; i++) {
temp = num[i];
for (j = i; j > 0; j--) {
if (num[j - 1] >temp) {
num[j] = num[j - 1];
}
else
break;
}
num[j] = temp;
}
for (int i = 0; i < count;i++) {
cout << num[i] << endl;
}
}
삽입정렬
i=1부터 시작해서 i번째 요소를 temp로 정하고 temp 왼쪽부터 루프를 돌려서
temp보다 크면 오른쪽으로 옮기고 작으면 그자리에 temp를 배치한다.
'백준' 카테고리의 다른 글
| [백준] 11047번, 1931번 - 그리디 알고리즘 (0) | 2021.12.31 |
|---|---|
| [백준] 1003번 - 동적 계획법 (0) | 2021.12.30 |
| [백준] 15649번 - 백트래킹 알고리즘, DFS (0) | 2021.12.29 |
| [백준] 10989번 - 카운팅 정렬 (0) | 2021.12.28 |
| [백준] 11729번 하노이 탑 - 재귀 알고리즘 (0) | 2021.12.26 |