알고리즘 요약

선택정렬 (selection sort)

-가장 작은 항목을 찾아서 맨앞부터 차례로 배치를 반복한다. -시간복잡도: O(n²)

정렬과정 설명

② ③ ④ : 위치번호 [3, 2, 5, 4, 1] :숫자열이 있을 경우, -제일 작은 수 ⑤1을 ①3과 위치 변경 [1, 2, 5, 4, 3] -②위치부터 제일 작은 수 ②2 와 ②2 서로 위치 변경 [1, 2, 5, 4, 3] -③위치부터 제일 작은 수 ⑤3과 ③5 서로 위치 변경 [1, 2, 3, 4, 5] -마지막 전까지 반복하면 정렬이 끝난다.

Python 코드 코드편집/실행


def selection_sort(a): # a는 숫자열
  ln = len(a) # 배열의 길이
  for i in range(ln - 1): # 배열 마지막 위치 전까지
    min = i # 제일 작은 값을 가진 위치를 min 이라 하고 초기값으로 시작위치 대입
    for j in range(i + 1, ln): # 시작 다음위치 부터 마지막 배열까지 루프
      if a[min] > a[j]: # 더 작은 값이 있으면
        min = j # 더 작은 값이 있는 위치값으로 변경
    a[i], a[min] = a[min], a[i] # 비교시작 위치값과 최소값을 교환
  return a # 루프가 끝나면 정렬 끝. 리턴.

print(selection_sort([5, 2, 3, 4, 1])) # 결과는 [1, 2, 3, 4, 5] 

C/C++ 코드 코드편집/실행


#include <stdio.h>

void selection_sort(int a[], int len) {
  int i, j, min, tmp;
  for (i = 0; i < len-1; i++) { // 마지막 하나는 비교가 필요없으므로 그 전까지 비교 루프
    min = i; //최소위치 초기값으로 시작 인덱스값.
    for (j = i + 1; j < len; j++) { // 시작 다음부터 마지막까지 값 비교.
      if (a[j] < a[min]) min = j; // 더 작은 값이 있으면 min 인덱스값 변경
    }
    tmp = a[min]; a[min] = a[i]; a[i] = tmp; // 최소값과 현재
  }
}

int main() { // 선택정렬 함수 테스트
  int i, a[] = {3, 2, 5, 4, 1}, len = sizeof(a) / sizeof(a[0]);
  selection_sort(a, len);
  for (i = 0; i < len; i++) printf("%d ", a[i]); // 결과: 1 2 3 4 5  
}
© 코드솔 - CodeSol. All Rights Reserved.