퀵정렬 3

정렬 알고리즘

[정렬 알고리즘 이란?] 정렬(Sorting이란 데이터를 특정한 기준에 따라 순서대로 나열하는 것이다. 정렬 알고리즘의 종류는 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 등이 있다. 7 5 1 2 4 6 3 위와 같이 각각의 수가 존재할 때 기본적으로 오름차순으로 수를 정렬한다면 아래와 같다. 1 2 3 4 5 6 7 내림차순 또한 마찬가지로 정렬한다면 아래와 같다. 7 6 5 4 3 2 1 이와 같이 우리는 특정한 수들이 존재할 때 정렬을 금방 수행할 수 있지만, 컴퓨터는 인간과 다르게 데이터의 규칙성을 직관적으로 알 수 없으며, 어떻게 정렬을 수행할지에 대한 과정을 소스코드로 작성하여 구체적으로 명시해야 한다. [선택 정렬] 선택 정렬은 현재의 범위에서 가장 작은 데이터를 선택하여 맨 앞에 있는 ..

백준(C) 2217번 로프 풀이

C로 구현한 2217번 로프 문제 풀이입니다. https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net #include #include int compare(const void* first, const void* second) { if(*(int*)first *(int*)second) return 1; else return 0; } int main() {..

퀵정렬(Quick Sort)

퀵정렬은 특정한 배열이 있을 때 그 배열의 원소들을 반복적으로 분할하는 것이다. 즉, 퀵정렬은 특정한 피벗값(기준값)을 기준으로 왼쪽과 오른쪽으로 나누기 때문에 '분할 정복'이라고도 부른다. [퀵 정렬의 시간 복잡도] 퀵 정렬의 시간 복잡도는 O(N * logN) 이다. 예를 들어, 1 2 3 4 5 6 7 8 9 10 와 같이 10개 수가 존재할 때 선택 정렬을 사용하게 되면 O(N^2) 이기 때문에 10 * 10 = 100 이 나온다. 하지만, 퀵 정렬을 사용하면 1 2 3 4 5 와 6 7 8 9 10 으로 분할하여서 N^2 이라고 했을 때 (5 * 5) + (5 * 5) = 50 이 나오기 때문에 결과적으로 훨씬 적은 수만큼 연산을 수행하게 된다. 이렇게 수를 반으로 나누는 과정은 2씩 계속 나눈..