본문 바로가기

분류 전체보기62

[알고리즘 공부] 5. Quick Sort (퀵 정렬) Quick Sort(퀵 정렬)은 특정 원소를 Pivot으로 잡습니다. 그 후 Pivot을 기준으로 작은 원소는 왼쪽으로 큰 원소는 오른쪽으로 보낸 뒤 Pivot을 이동 시킵니다. 다만 제가 이리저리 검색하면서 공부해본 결과 퀵 정렬의 기본은 딱 여기까지이고 이후 Pivot 설정문제나 이후 정렬 방식 등에 따라 많은 버전이 존재합니다. 이 말은 곧 Pivot을 어떻게 잡아주느냐에 따라서 알고리즘의 효율이 결정된다는 말이기도 합니다. 일반적으로 퀵 정렬은 시간 복잡도 O(n log n)을 가지고 있으나 최악의 경우 O(n^2)을 가지기도 합니다. 이 글에서는 가장 간단한 퀵 정렬 방식 중 하나인 로무토 파티션 버전을 기준으로 설명 및 코드를 짜겠습니다. 위의 방식을 재귀적으로 반복하면 정렬이 되겠죠? 하지만.. 2021. 5. 26.
[알고리즘 공부] 4. Merge Sort(합병 정렬) 정렬 알고리즘을 공부하면서 앞의 정렬 알고리즘들은 가볍게 훑고 지나가도 되지만 이제부터는 집중해서 직접 구현해보고 이해하는 것이 좋습니다. Merge Sort(합병 정렬)은 이 쪽 분야계의 천재 중의 천재로 불리는 존 폰 노이만이 개발했습니다. 합병 정렬은 특히 분할 정복 알고리즘으로 짜여진 알고리즘입니다. 분할 정복 알고리즘 문제를 풀기 쉽도록 분할 한 다음 나누어서 풀고 다시 합쳐서 해결하는 방법 이는 위의 그림만 보고는 헷갈릴 수도 있는데 아래의 링크를 보시면 쉽게 이해 될 것입니다. https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html [알고리즘] 합병 정렬(merge sort)이란 - Heee's Development Blog St.. 2021. 5. 25.
[알고리즘 공부] 3. Insertion Sort (삽입 정렬) Selection Sort(선택 정렬) 와 비슷한 느낌으로 진행되는 Insertion Sort(삽입 정렬) 입니다. 하나씩 가져와서 앞의 원소들과 확인 후 알맞는 자리에 넣는 형식의 정렬 형태입니다. 버블 정렬, 선택 정렬에 비해 조금 귀찮아보이지만 사실 구현으로 들어가면 크게 다르지 않습니다. 구현이 똑같이 간단하다는 것은? 네 그렇습니다. 똑같이 시간 복잡도도 크게 다르지 않다는 뜻입니다. ㅜㅜ 마찬가지로 시간 복잡도 또한 O(n^2)입니다. 원리 또한 마찬가지로 간단하므로 바로 파이썬 구현으로 넘어가겠습니다. input = [14,54,5,2,1,36,324,34,213,6,7,4] def InsertionSort(input): length = len(input) for x in range(1, l.. 2021. 5. 25.
[알고리즘 공부] 2. Selection Sort (선택 정렬) 버블 정렬과 비해도 크게 어렵지 않은 쉬운 정렬 중 하나인 Selection Sort(선택 정렬)입니다. 선택 정렬은 수열을 배회하다가 가장 작은 수를 찾아 맨 앞으로 내보내고 그 다음 숫자부터 반복하는 쉬운 정렬 입니다. 버블 정렬과 마찬가지로 구현의 간단함을 대가로 시간 복잡도를 잃었습니다. 선택 정렬의 시간 복잡도는 O(n^2)으로 버블 정렬과 동일합니다. 크게 어려운 것이 없으니 마찬가지로 파이썬 구현으로 넘어가겠습니다. input = [14,54,5,2,1,36,324,34,213,6,7,4] def SelectionSort(input): length = len(input) # 한바퀴 돌때 마다 시작 숫자는 한칸씩 뒤로 for x in range(length): for y in range(x, .. 2021. 5. 25.