logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [Algorithm] 정렬 2. Selection Sort

    이미지 보기

    [Algorithm] 정렬 2. Selection Sort

    정렬 중 선택 정렬에 대해 알아보자.

    • 22.02.14 작성

    • 읽는 데 3

    TOC

    선택 정렬(Selection Sort)

    주어진 자료들 중 가장 작은 값의 원소부터 차례대로 선택하여 위치 교환


    정렬 과정

    • 주어진 리스트 중에서 최솟값 확인
    • 그 값을 리스트의 맨 앞에 위치한 값과 교환
    • 맨 처음 위치를 제외한 나머지 리스트를 대상으로 위 과정 반복
    • 시간 복잡도 : O(n2)

    구현

    알고리즘은 다음과 같다.

    def selectionSort(a[], n)
      0부터 n-2까지 순회하는 i마다
        a[i],...,a[n-1] 원소 중 최솟값 a[k] 찾음
        a[i]와 a[k] 교환
    

    k는 최솟값의 인덱스이므로 최솟값을 발견한다면 최솟값 인덱스 k도 저장해둘 필요가 있다.


    이를 python 코드로 나타내보자.

    def selectionSort(a, N):
        for i in range(N-1):
            minIdx = i
            for j in range(i+1, N):
                if a[minIdx] > a[j]:
                    minIdx = j
            a[i], a[minIdx] = a[minIdx], a[i]
    

    Selection Algorithm

    • 저장되어 있는 자료로부터 k번째로 큰 혹은 작은 원소를 찾는 방법
    • 최솟값, 최댓값, 중간값을 찾는 알고리즘

    선택 과정

    • 정렬 알고리즘 이용하여 자료 정렬
    • 원하는 순서에 있는 원소 추출

    k번째로 작은 원소를 찾는 알고리즘

    • 1번째부터 k번째까지 작은 원소들을 찾아 배열의 앞쪽으로 이동
    • 배열의 k번째를 반환
    • k가 비교적 작을 때 유용하며 O(kn)의 수행시간을 필요로 한다.

    def select(arr, k):
        for i in range(0, k):
            minIndex = i
            for j in range(i+1, len(arr)):
                if arr[minIndex] > arr[j]:
                    minIndex = j
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
        return arr[k-1]
    
    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다