- 선택정렬 : 전체 배열 중 가장 작은 것을 선택해서 맨 앞으로 보내는 것 (맨 앞에 숫자는 제일 작은 것에 있던 숫자의 자리로 값을 스와핑한다.)
5 2 6 1 3 4
1 2 6 5 3 4
1 2 6 5 3 4
1 2 3 5 6 4
1 2 3 4 6 5
1 2 3 4 5 6
- 1회차 : 6번 비교
- 2회차 : 5번 비교
- 3회차 : 4번 비교 ...
=> 6 + 5 + 4 + 3 + 2 + 1 (등차수열)
=> n*(n-1) / 2 (컴퓨터에서는 가장 큰 차수만 보기 때문에 -1 과 /2 제거)
=> n*n
=> 시간 복잡도 ? 데이터가 N개 일때 총 몇 번의 비교 연산을 하는가
시간복잡도 빅오 : O(N^2)
데이터가 10000개면 약 1억번 계산해야하는 비효율적인 알고리즘
//선택정렬 Selection Sort
#include <iostream>
using namespace std;
int main(void) {
int min, index, temp;
int array[6] = { 5,2,6,1,3,4 };
for (int i = 0; i < 6; i++) {
min = 999;
for (int j = i; j < 6; j++) {
if (array[j] < min) { //가장 작은 수 찾는 파트
min = array[j];
index = j;
}
}
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for (int i = 0; i < 6; i++)
cout << array[i] << " ";
return 0;
}
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
백준 3052 - 나머지 : [c++ STL] set 이용 (0) | 2019.07.02 |
---|---|
2) 알고리즘 : 정렬 - 버블정렬(Bubble Sort) (0) | 2019.07.01 |
[알고리즘 공부 계획] + 백준 5598 - OX퀴즈 풀이 (0) | 2019.07.01 |
다이나믹 프로그래밍 DP 동적계획법 (0) | 2019.06.22 |
[C++] 벡터 사용법 / 깊이우선탐색 DFS (0) | 2019.06.18 |