정렬 알고리즘

이정연·2023년 5월 5일
0

정렬을 할 때 가져다 쓸 수 있는 도구들 집대성

버블 정렬

버블 정렬(Bubble Sort)은 인접한 두 원소를 비교하여 정렬하는 알고리즘 중 가장 간단한 형태입니다. 이름에서 유추할 수 있듯이, 정렬 과정에서 원소들이 "거품처럼" 이동하면서 정렬이 완료됩니다.

버블 정렬은 다음과 같은 알고리즘으로 동작합니다.

  1. 리스트의 첫 번째 원소부터 마지막 원소까지, 인접한 두 원소를 비교합니다.
  2. 왼쪽 원소가 오른쪽 원소보다 크면, 두 원소의 위치를 서로 바꿉니다.
  3. 모든 인접한 원소 쌍에 대해 위 과정을 반복합니다.
  4. 마지막 원소까지 위 과정을 수행한 후, 마지막 원소를 제외하고 다시 1번 과정부터 반복합니다.
  5. 리스트가 정렬될 때까지 위 과정을 반복합니다.

다음은 Python 코드로 구현된 버블 정렬의 예시입니다.

def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(n-i-1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

위 코드에서 lst는 정렬할 리스트를 나타냅니다. n 변수에는 리스트의 길이를 저장하고, 바깥쪽 for 루프는 리스트의 모든 원소를 순회합니다. 안쪽 for 루프는 인접한 두 원소를 비교하고, 원소의 위치를 교환합니다. 이 과정을 모든 인접한 원소 쌍에 대해 반복하며, 리스트를 정렬합니다.

버블 정렬의 시간복잡도는 O(N^2)이다.

파이썬 sort() 메서드

팀 소트는 삽입 정렬과 병합 정렬을 가져다 쓰는 정렬 방법

파이썬에서 정렬 메서드를 사용할 때는 팀 소트를 사용한다.

팀 소트는 병합 정렬과 삽입 정렬의 하이브리드다.

작은 크기의 리스트에서는 삽입 정렬, 중간 크기 이상의 리스트에서는 병합 정렬을 사용.

삽입 정렬

1번 원소부터 마지막 원소까지 아래의 과정을 반복한다.

현재 원소 앞쪽에 있는 리스트에 대하여 현재 원소가 들어갈 위치를 찾아 삽입한다.

최악의 경우 시간복잡도는 O(N^2)

병합 정렬

  1. Divide: 1개의 원소가 될 때까지 리스트 2등분
  2. Conquer: 대소 비교를 통해 리스트 합병해나감.

Conquer 동작 과정


Divide: N개의 원소를 이등분 해나가므로 O(logN)
Conquer: N개의 원소를 하나씩 비교해가며 sorted list에 추가하므로 O(N)

따라서, 팀소트는 시간복잡도가 O(NlogN)

Reference

https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html

https://gmlwjd9405.github.io/2018/05/06/algorithm-insertion-sort.html

https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html

profile
0x68656C6C6F21

0개의 댓글