Notice
Recent Posts
Recent Comments
Link
DY N DY
알고리즘 정렬(C++) 본문
1972 : 정렬(SORT)
제한시간: 1000 ms 메모리제한: 32 MB
해결횟수: 1425 회 시도횟수: 4289 회
입력으로 주어진 자연수들을 오름차순 또는 내림차순으로 정렬하여 출력하여보자.
[Copy]5 0 9 2 5 1 100 | [Copy]1 2 5 9 100 |
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | /************************************************************** Problem: 1972 User: a132034 Language: C++ Result: Success Time:84 ms Memory:2132 kb ****************************************************************/ #include <iostream> using namespace std; int partition(int *arr, int start, int end) { int pivot = arr[start]; int left = start; int right = end; while (left <= right) { while (left <= end && pivot >= arr[left]) left++; while (right >= start+1 && pivot <= arr[right]) right--; if (left <= right) swap(arr[left], arr[right]); } swap(arr[start], arr[right]); return right; } void quickSort(int *arr, int start, int end) { if (start < end) { int pivot = partition(arr, start, end); quickSort(arr, pivot + 1, end); quickSort(arr, start, pivot - 1); } } int main() { int N; int *arr; cin >> N; arr = new int[N + 1]; int order; cin >> order; for (int i = 1; i <= N; ++i) cin >> arr[i]; quickSort(arr, 1, N); if (order == 0) { for (int i = 1; i <= N; ++i) printf("%d\n", arr[i]); } else { for (int i = N; i > 0; --i) printf("%d\n", arr[i]); } } |
타 라이브러리를 안쓰고 한번 구현해 보았다. 역시 맨날 사용하던 편한 sort함수를 구현하려 하니... 정렬 알고리즘 종류도 까먹어서 정렬알고리즘을 다시보는 계기가 되었다. 각종 자료구조도 그렇고 이런 간단한 알고리즘들은 구현해보는것도 좋은 것 같다.
구현은 quick sort로 하였다.
출력 자체는 cout으로 출력하게 되면 printf보다 느리기 때문에 시간초과가 난다.
특히 printf, scanf와의 sync를 중지하더라도 ( ios::sync_with_stdio(false) ) endl자체가 상당히 느리기 떄문에 이렇게 endl이 많이 나오는 경우 시간이 오래 걸린다.
'PARK > ALGORITHM' 카테고리의 다른 글
BOJ 2839 설탕배달(C++) (0) | 2017.03.02 |
---|---|
알고리즘 회의실 배정(C++) (0) | 2016.12.22 |
알고리즘 엔디안(C++) (1) | 2016.12.21 |
BOJ 1002 터렛(C++) (1) | 2016.10.26 |
실력키우기 숫자 야구(C++) (3) | 2016.10.25 |