• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [알고리즘] 선택정렬 (selection sort)
        2024년 11월 20일
        • 학페
        • 작성자
        • 2024.11.20.:07

         

        선택 정렬이란?

        선택 정렬은 배열을 정렬할 때 가장 작은(혹은 가장 큰) 값을 찾아 배열의 맨 앞부터 차례로 정렬하는 방식입니다. 이름에서 알 수 있듯이, 값을 선택(select)하고 이를 적절한 위치로 옮기는 과정이 반복됩니다.

        간단한 동작 원리:

        1. 주어진 배열에서 가장 작은 값을 찾습니다.
        2. 그 값을 배열의 맨 앞에 위치한 값과 교환(swap) 합니다.
        3. 배열의 두 번째 위치부터 위 과정을 반복하며, 끝까지 진행하면 정렬이 완료됩니다.

        선택 정렬의 동작 과정

        예를 들어, 배열 [64, 25, 12, 22, 11]를 오름차순으로 정렬해 보겠습니다.

        1. 첫 번째 단계
          • 배열 전체를 탐색하여 가장 작은 값 11을 찾습니다.
          • 11을 첫 번째 위치(64)와 교환합니다.
          • 배열 상태: [11, 25, 12, 22, 64]
        2. 두 번째 단계
          • 나머지 배열 [25, 12, 22, 64]에서 가장 작은 값 12를 찾습니다.
          • 12를 두 번째 위치(25)와 교환합니다.
          • 배열 상태: [11, 12, 25, 22, 64]
        3. 세 번째 단계
          • 나머지 배열 [25, 22, 64]에서 가장 작은 값 22를 찾습니다.
          • 22를 세 번째 위치(25)와 교환합니다.
          • 배열 상태: [11, 12, 22, 25, 64]
        4. 네 번째 단계
          • 마지막으로 [25, 64]에서 가장 작은 값 25를 유지합니다.
          • 배열은 이미 정렬된 상태입니다: [11, 12, 22, 25, 64]

        선택 정렬의 코드 구현

        선택 정렬의 코드는 간단합니다. C++로 구현해 보겠습니다.

        #include <iostream>
        #include <stack>
        #include <string>
        #include <unordered_map>
        #include <vector>
        #include <algorithm>
        using namespace std;
        
        void selection_sort(int ary[], int size) {
        	int min, temp; //최솟값의 인덱스를 저장할 min과 값swap을 위한 temp 변수 선언
        	for (int i = 0; i < size - 1; i++) { // 배열의 첫 값부터 최대 크기 - 1만큼 반복 
        		min = i;
        		for (int j = i + 1; j < size; j++) { // i+1부터 배열의 최대크기만큼 반복
        			if (ary[j] < ary[min]) // 가장 작다고 생각했던 값보다 더 작은 값이 존재하면?
        				min = j; // 그 인덱스를 min에 넣는다.
        		}
        		temp = ary[i]; // 탐색 과정 종료 후, swap 과정
        		ary[i] = ary[min];
        		ary[min] = temp;
        	}
        }
        
        int main() {
        	ios_base::sync_with_stdio(false);
        	cin.tie(NULL);
        	int ary[5] = { 64, 25, 12, 22, 11};
        	selection_sort(ary, 5);
        	for (int i = 0; i < 5; i++) 
        		cout << ary[i] << ' ';
        
        	return 0;
        }

        'Data structure & Algorithm' 카테고리의 다른 글

        [알고리즘] 합병정렬 (Merge Sort) (BOJ 2752, C++)  (0) 2024.12.13
        [정리] 포인터를 사용하는 이유에 대한 개인적인 생각(백준 1920, C++)  (0) 2024.11.23
        [알고리즘] 버블정렬 (Bubble sort)  (0) 2024.11.22
        [알고리즘] 삽입정렬 (insertion sort)  (0) 2024.11.21
        그래프 탐색 - DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)  (0) 2022.09.04
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바