기본적인 정렬 알고리즘

uglyduck.dev·2020년 9월 27일
1

알고리즘 🧮

목록 보기
9/16

정렬 알고리즘 개요

Selection Sort

selection sort

  • 각 루프마다
    • 최대 원소를 찾는다
    • 최대 원소와 맨 오른쪽 원소를 교환한다
    • 맨 오른쪽 원소를 제외한다
  • 하나의 원소만 남을 때까지 위의 루프를 반복

Pseudo code

SelectionSort(A[], n) // 배열 A[1...n]을 정렬한다.
{
    for last // n downto 2 {            ------------- ①
        A[1...last] 중 가장 큰 수 A[k]를 찾는다; ------------- ②
        A[K] <-> A[last]; // A[K]와 A[last]의 값을 교환  ------ ③
    }
}

실행 시간

  1. ①의 for 루프는 n-1번 반복
  2. ②에서 가장 큰 수를 찾기 위한 비교횟수: n-1, n-2, ..., 2, 1
  3. ③의 교환은 상수 시간 작업

시간 복잡도

  • T(n)=(n-1)+(n-2)+...+2+1 = O(n2)
  • 평균, 최선, 최악의 경우는 동일하다.

Bubble Sort

bubble sort

Pseudo code

BubbleSort(A[], n) //배열 A[1...n]을 정렬한다.
{
    for last // ndownto2 {   ------------- ①
        for i -> 1 to last-1    ------------- ②
        if (A[i]>A[i+1]) then A[i] <-> A[i+1]; // 교환 ------- ③
    }
}

수행 시간

  1. ①의 for 루프는 n-1번 반복
  2. ②의 for 루프는 각각 n-1, n-2, ... ,2 ,1번 반복
  3. ③의 교환은 상수 시간 작업

시간 복잡도

  • T(n)=(n-1)+(n-2)+...+2+1 = O(n2)
  • 평균, 최선, 최악의 경우는 동일하다.

Insertion Sort

insertion sort 1
insertion sort 2

Pseudo code

InsertionSort(A[], n)//배열 A[1...n]을 정렬한다.
{
    for i // 2 to n ------------- ①
      A[1...i]의 적당한 자리에 A[i]를 삽입한다. ------------- ②
}

수행 시간

  1. ①의 for루프는 n-1번 반복
  2. ②의 삽입은 최악의 경우 i-1번 비교

시간 복잡도

  • 최악의 경우: T(n)=(n-1)+(n-2)+...+2+1 = O(n2)

Reference

profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글