[알고리즘] 정렬 알고리즘의 개요와 선택 정렬

Hyo Kyun Lee·2022년 1월 11일
0

알고리즘

목록 보기
2/45

1. 정렬

알고리즘(문제를 해결하는 과정)의 효율성 차이에 대해 가장 빠르게 이해할 수 있는 수단 중 하나.

말 그대로 data 혹은 숫자를 어떻게 구성하고 위치하는 지에 대해 정의하는 방법론이다.

1-1. 선택정렬

target data를 정한 후(정하는 방법은 여러가지가 있을 것임), target data를 원하는 위치에 분류하는 방식 혹은 알고리즘을 일컫는다.

예를 들어, array = [1, 2, 3, 4, 5, 6, ... ]가 있고 이를 오름차순으로 정렬한다고 가정해보자.

이때 차례로 array를 순회하면서 가장 작은 수를 찾고, 이를 원하는 위치에 가져다 놓거나 자리를 바꾸는 알고리즘을 선택정렬이라 일컫는다.

1-2. 주요개념

  • for loop
  • swapping (swapping, 두 array data의 자리를 바꿀때 temp를 이용하여 바꾸는 방법)
##selected array
## 1 2 3 4 5 6 7 8 9 10

array = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
arrayLength = len(array)

for i in range(arrayLength):
    minValue = array[i]
    minIndex = i
    for j in range(i, arrayLength):
        if minValue > array[j]:
            minValue = array[j]
            minIndex = j
    temp = array[i]
    array[i] = array[minIndex]
    array[minIndex] = temp

print(array)

1-3. 시간복잡도

array data의 개수를 N이라 하자.

이때 선택정렬의 비교연산은 최초 10번부터, index에 따라 9 + 8 + ... 형식으로 누적된다.
등차수열에서 N개의 data가 있을때 연산횟수는 N(N+1)/2회가 되며, 컴퓨터 연산에서 상수를 제거하고 남은 시간복잡도는 O(N^2)이 된다.

따라서 N이 많아진다면 제곱에 비례하여 시간복잡도가 늘어나게 되고, 이에 따라 선택정렬은 구현은 쉽지만 상당히 비효율적인 알고리즘인 것을 알 수 있다.

1-4. big O 표기법

알고리즘의 시간 효율성을 나타내는 표기법이다.
(*알고리즘 공간, 메모리에 대한 효율성은 공간복잡도로 별도 표기)

빅오 표기법은 현재 수행하는 알고리즘을 f(n)이라 정의하고, 그 위에 상한선(점근선) g(n)을 정의하여 현재 알고리즘의 시간소요의 상한선을 알 수 있는 표기법이다.

빅오 표기법은 알고리즘의 시간복잡도를 상한선을 기준으로 표기하기 때문에, 최대 복잡도를 알 수 있을 뿐만 아니라, data가 커짐에 따라 얼마나 시간이 많이 소요되고 복잡한지를 한눈에 알 수 있다.

1-5. 참조강의

빅오 표기법
https://noahlogs.tistory.com/27

실전알고리즘 강좌
https://www.youtube.com/watch?v=8ZiSzteFRYc&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz&index=2

0개의 댓글