[알고리즘] 선택 정렬 (Selection Sort)

반응형
반응형

* 다음 포스팅은 개인적인 공부 내용을 기록한 것으로, 잘못된 내용이 있을 수 있습니다.

  • 선택정렬[Selection Sort] 알고리즘이란?
  • 선택정렬 예시
  • #선택정렬 C언어 구현코드

#선택 정렬[Selection Sort] 알고리즘 이란?

선택 정렬은 기초가 되는 정렬 알고리즘 중 하나로, "가장 작은 값을 탐색하여 맨 앞의 데이터와 교환해 나가는 아이디어"를 이용한 알고리즘이다. 시간복잡도는 모든 상황에서 O(N^2)으로 , 다른 정렬 알고리즘에 비해서 매우 비효율적이다.

배열에 3 5 2 8 7 이 저장되어 있다고 가정하고 선택 정렬 알고리즘을 이용해 오름차순으로 정렬해 보도록 하자.

 

#선택 정렬[Selection Sort] 예시

[탐색 1] 첫 번째 인덱스 3과 나머지 자료(2번째 ~ 5번째)를 비교하여 가장 작은 값 (2)를 찾아 스왑한다.

[탐색 2] 두 번째 인덱스 5와 나머지 자료(3번째 ~ 5번째)를 비교하여 가장 작은 값 (3)을 찾아 스왑한다.

[탐색 3] 최솟값(5)이 자기 자신(5)과 일치하기에 스왑하지 않는다.

[탐색 4] 네 번째 인덱스 8과 나머지 자료 (5번째)를 비교하여 가장 작은 값(7)을 찾아 스왑한다.

 

#선택 정렬 C언어 구현코드 

#include <stdio.h>
int arr[5] = {3, 5, 2, 8, 7};
int index,temp;

int main()
{
	// 정렬 전 
	printf("BEFORE\n");
	for (int i = 0 ; i < 5 ; ++i)
	{
		printf("%d ", arr[i]);
	}
	
	// Selection Sort
	for (int i = 0 ; i < 5 ; ++i)
	{
		int min = arr[i];
		
		for ( int j = i + 1 ; j < 5 ; ++j)
		{
			if (min > arr[j]){
				min = arr[j];
				index = j;
			}
		}
		
		temp = arr[i];
		arr[i] = arr[index];
		arr[index] = temp;
	}
	
	// 정렬 후 
	printf("\nAFTER\n");
	for (int i = 0 ; i < 5 ; ++i)
	{
		printf("%d ", arr[i]);
	}
}

 

반응형

댓글

Designed by JB FACTORY