#include <stdio.h>
int N, M, n[100001];
int mid(int a, int b, int c){
if (n[a] > n[b]&& n[a] < n[c])return a;
if (n[b] > n[a]&& n[b] < n[c])return b;
return c;
}
int q_sort_up(int s, int e){
if (s >= e)return 0;
int l = mid(s, e, (s + e) / 2);
int L = n[l], T = s, i, temp;
temp = n[l]; n[l] = n[e]; n[e] = temp;
for (i = s; i < e; i++){
if (L >= n[i]){
temp = n[T]; n[T] = n[i]; n[i] = temp;
T++;
}
}
if (L < n[T]){
temp = n[T]; n[T] = n[e]; n[e] = temp;
}
q_sort_up(s, T);
q_sort_up(T + 1, e);
}
int q_sort_down(int s, int e){
if (s >= e)return 0;
int l = mid(s, e, (s + e) / 2);
int L = n[l], T = s, i, temp;
temp = n[l]; n[l] = n[e]; n[e] = temp;
for (i = s; i < e; i++){
if (L <= n[i]){
temp = n[T]; n[T] = n[i]; n[i] = temp;
T++;
}
}
if (L > n[T]){
temp = n[T]; n[T] = n[e]; n[e] = temp;
}
q_sort_down(s, T);
q_sort_down(T + 1, e);
}
int main(void)
{
int i, j;
scanf("%d %d", &N, &M);
for (i = 0; i < N; i++){
scanf("%d", &n[i]);
}
if (M==0)q_sort_up(0, N - 1);
else q_sort_down(0, N - 1);
for (i = 0; i < N; i++){
printf("%d\n", n[i]);
}
}
이러면 메모리는 100001 배열만큼만 사용한거아닌가?
문제 메모리 제한은 32MB인데 이 소스 제출하면 자꾸 메모리 초과했다고 뜸
재귀 ( 스택 ) 터졌겠지 뭐.
훨 간단한 모델 많으니 로제타나 위키 뒤져보셈.
아니 분할 소팅은 원래 재귀 아님? 저기에 재귀 잘못한게 없을텐데
재귀 자체가 문제가 아니라 조건을 잘못타서 필요이상 도는 경우일꺼란 소리.
그리고 분할 소팅도 비재귀로 짤 수 있음.
Colorscripter 여기서 색칠하면 읽는 사람이 늘것임 솔직히 읽기시름
와진짜족같이짯다 - dc App