정렬 알고리즘(2)
-
단어 정렬 - 백준 1181
문제 링크 1181번: 단어 정렬 (acmicpc.net) 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 문자열을 정렬하는 문제입니다. 문자열을 길이순으로 정렬하되, 길이가 같은 경우 사전순으로 정렬하고 같은 단어가 있는 경우 한 번만 출력합니다. 소스코드 #include #include #include using namespace std; string s[20000]; bool sort1(string a, string b) { if (a.size() < b.size()) return true; ..
2022.02.16 -
4. 퀵 정렬 (Quick Sort)
지난 포스팅에서 살펴본 선택, 버블, 삽입 정렬은 모두 시간복잡도 O(N^2)을 가졌습니다. 그렇기 때문에 데이터의 갯수가 많아지면 일반적인 상황에서 사용하기 매우 어렵습니다. 이번에 다룰 퀵 정렬(Quick Sort)은 대표적인 분할정복(divide and conquer) 알고리즘으로, 시간복잡도 O(N*logN)을 가져 매우 빠른편으로, 일반적인 상황에서 사용하기 용이합니다. 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하시오. 1 10 5 8 7 6 4 3 2 9 문제는 동일합니다. 숫자들을 arr 배열이라고 합시다. 퀵 정렬에서는 기준값(피벗) 을 정해놓고 진행합니다. 보통 첫 번째 원소인 1 을 피벗으로 정합니다. P: 1보다 큰 숫자를 왼쪽부터 찾고, 1보다 작은 숫자를 오른쪽부터 찾습..
2022.02.01