회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
2
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
[c언어] 시간초과
2751번 - 수 정렬하기 2
angela0102
5년 전
0
퀵정렬로 문제를 풀었는데, 시간초과라고 나옵니다...ㅠㅠ
#include <stdio.h> //QuickSort - 정가운데pivot. pivot보다크면오른쪽/작으면왼쪽 int a[1000000]; void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void quickSort(int left, int right) { int l = left, r = right; int p_num = (left + right) / 2; int pivot = a[p_num]; swap(&a[p_num], &a[left]); p_num = left; while (l <= r) { while (a[l] < pivot) l++; while (a[r] > pivot) r--; if (l < r) { swap(&a[l], &a[r]); l++; r--; } } swap(&a[p_num], &a[r]); if (left < r) quickSort(left, r); if (l < right) quickSort(l, right); } int main() { int n; scanf("%d", &n); int i = 0; //int *a = (int*)malloc(sizeof(int)*n); for (i = 0; i < n; i++) scanf("%d", &a[i]); quickSort(0, n-1); for (i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); return 0; }
jh05013
5년 전
1
퀵정렬은 최악의 경우 O(n^2)이 걸립니다.
djm03178
5년 전
1
naive한 퀵소트는 항상 최악의 경우 O(N^2)이 걸린다는 것을 고려해야 하고, 특히 온라인 저지의 입력 데이터에는 이런 케이스가 들어있을 가능성이 아주 높습니다. 그냥 이미 정렬이나 역정렬된 상태의 입력을 주면 되기 때문이죠. 정렬 기능을 직접 구현하는 게 목표라면 병합 정렬이나 힙 정렬, 아니면 좀 더 보완된 퀵 정렬 등을 구현하셔야 합니다. 아니면, 그냥 stdlib.h에 있는 qsort 쓰세요.
댓글을 작성하려면
로그인
해야 합니다.
angela0102 5년 전
퀵정렬로 문제를 풀었는데, 시간초과라고 나옵니다...ㅠㅠ