티스토리 뷰
반응형
단순히 수를 정렬하는 문제다.
수의 개수 N(1 ≤ N ≤ 1,000,000)이다.
그래서 퀵소트를 썼는데 시간초과가 떴다ㅜㅜ
1차 시도
#include <stdio.h>
#include <stdlib.h>
int divide(int *arr, int left, int right)
{
int pivot;
int low = left + 1;
int high = right;
int temp;
pivot = arr[left];
while(low <= high)
{
while (low <= right && pivot > arr[low])
{
low++;
}
while (high >= (left + 1) && pivot < arr[high])
{
high--;
}
if (low <= high)
{
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}
temp = arr[left];
arr[left] = arr[high];
arr[high] = temp;
return (high);
}
void quicksort(int *arr, int l, int r)
{
int pivot;
if(l <= r)
{
pivot = divide(arr, l, r);
quicksort(arr, l, pivot - 1);
quicksort(arr, pivot + 1, r);
}
}
int main(void) {
int n;
int i = 0;
int *temp;
scanf("%d", &n);
temp = (int *)malloc(sizeof(int) * n);
while (i < n)
{
scanf("%d", &temp[i]);
i++;
}
quicksort(temp, 0, n - 1);
for (i=0;i<n;i++)
{
printf("%d\n",temp[i]);
}
return 0;
}
질문 검색을 해보니 머지 소트를 써야된다고 써있었다.
머지 소트...이렇게 또 하나 알아간다.
2차 시도(성공)
#include <stdio.h>
#include <stdlib.h>
int n;
int size;
int *sorted;
void merge(int a[], int m, int middle, int n)
{
int i = m;
int j = middle + 1;
int k = m;
while (i <= middle && j <= n)
{
if (a[i] <= a[j])
{
sorted[k] = a[i];
i++;
}
else
{
sorted[k] = a[j];
j++;
}
k++;
}
if(i > middle)
{
for (int t = j; t <= n; t++)
{
sorted[k] = a[t];
k++;
}
}
else
{
for (int t = i; t <= middle; t++)
{
sorted[k] = a[t];
k++;
}
}
for(int t = m; t <= n; t++)
{
a[t] = sorted[t];
}
}
void mergesort(int a[], int m, int n)
{
int middle = (m + n) / 2;
if(m < n)
{
mergesort(a, m, middle);
mergesort(a, middle + 1, n);
merge(a, m, middle, n);
}
}
int main(void) {
int i = 0;
int *temp;
scanf("%d", &n);
temp = (int *)malloc(sizeof(int) * n);
sorted = (int *)malloc(sizeof(int) * n);
while (i < n)
{
scanf("%d", &temp[i]);
i++;
}
mergesort(temp, 0, n - 1);
for (i=0;i<n;i++)
{
printf("%d\n",temp[i]);
}
return 0;
}
아직 잘 몰라서 거의 베꼈는데 몇번 더 써보면서 익혀야겠다.
반응형
'코린이의 성장기' 카테고리의 다른 글
2020.08.06 printf 뿌셔뿌셔 (0) | 2020.08.06 |
---|---|
2020.08.03 [부스트 코딩 뉴비 챌린지] 3주차 끝, 4주차 시작 (0) | 2020.08.03 |
2020.07.23 libft Part2 해치웠나...? (0) | 2020.07.24 |
2020.07.22 42 Tech Seminar (0) | 2020.07.22 |
2020.07.22. 백준 1072번 '게임' (0) | 2020.07.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴퓨터과학
- 네이버커넥트재단
- 드림코딩by엘리
- BOJ
- codeforces
- django
- ES6
- 부스트코스
- 코딩뉴비챌린지
- 자바스크립트
- 부스트코딩뉴비챌린지
- github
- git
- 멋쟁이사자처럼9기
- C++
- 알고리즘
- 42서울
- 백준
- 42cursus
- printf
- 코드포스
- Python
- 멋쟁이사자처럼
- ft_server
- 코린이의 성장일기
- CS50
- 드림코딩
- ft_printf
- 42seoul
- 코린이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함