Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 선택정렬(C++) 본문
1146 : 선택정렬
제한시간: 1Sec 메모리제한: 32mb
해결횟수: 875회 시도횟수: 2563회
선택 정렬(selection sort)이란 내부정렬 알고리즘의 하나로 다음 순서대로 실행하여 정렬을 한다.
1. 주어진 수열 중에 최소값을 찾는다.
2. 찾은 최소값을 맨 앞의 값과 자리를 바꾼다.
3. 맨 앞의 값을 뺀 나머지 수열을 같은 방법으로 전체 개수-1번 반복 실행한다.
n개의 주어진 수열을 위와 같은 방법으로 정렬한다.
수열이 주어지면 선택정렬의 과정을 한 단계씩 출력한다.
[Copy]5 6 4 8 3 1 | [Copy]1 4 8 3 6 1 3 8 4 6 1 3 4 8 6 1 3 4 6 8 |
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 32 33 34 35 36 37 38 39 40 41 42 43 | /************************************************************** Problem: 1146 User: a132034 Language: C++ Result: Success Time:2 ms Memory:1740 kb ****************************************************************/ #include <iostream> #include <algorithm> using namespace std; int main() { int n; int * arr; cin >> n; arr = new int [n]; for ( int i = 0; i < n; ++i) cin >> arr[i]; int *min; int index; for ( int i = 0; i < n-1; ++i) { min = min_element(arr + i, arr + n); index = find(arr + i, arr + n, *min) - arr; int tmp = *min; arr[index] = arr[i]; arr[i] = tmp; for ( int z = 0; z < n; ++z) cout << arr[z] << " " ; cout << endl; } return 0; } |
1. 주어진 수열 중 최소값을 찾는다( stl -> min_element함수로 찾음)
2. 맨앞의 값과 자리를 바꾼다. (stl -> find함수로 min값의 위치를 찾아 i번째 위치와 바꾸어 줌)
3. n-1번 반복한다.
크게 어려운 것은 없었으나 빠른 구현을 위해
stl의 min_element, find를 사용해 보았다.
주의할 점은 보통 배열의 시작과 끝을
예를들어 n[10]의 배열이 있을 때, 시작과 끝이 n[0] -> n[9] 이나
종료주소는 n[10] 또는 n + 10으로 한다.
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 10진수를 2 8 16진수로(C++) (0) | 2016.05.08 |
---|---|
실력키우기 약수구하기(C++) (0) | 2016.05.03 |
실력키우기 후위표기법(JAVA) (0) | 2016.05.02 |
실력키우기 수열(JAVA) (0) | 2016.04.29 |
실력키우기 큐(JAVA) (0) | 2016.04.29 |