Selection Sort

2023. 4. 14. 12:19·📚 Data Architect/Algorithm
목차
  1. 💡 선택 정렬 (Selection Sort)
  2. 과정
  3. 구현

💡 선택 정렬 (Selection Sort)

대상 데이터의 최소값과 최대값을 찾아서 데이터가 나열된 순으로 찾아가며 선택하는 방법이다.

구현 방법이 복잡하고 시간복잡도도 버블 정렬과 같이 O(n2)으로 비효율적이다.

선택 정렬의 원리만 간단히 알아보자.


과정

  1. 남은 정렬부분에서 최대값 & 최소값을 찾는다.
  2. 남은 정렬 부분에서 가장 앞에 있는 데이터와 선택된 데이터를 swap 한다.
  3. 가장 앞에 있는 데이터의 위치를 변경해(index++) 남은 정렬 부분의 범위를 축소한다.
  4. 전체 데이터 크기만큼 index가 커질 때 까지 즉, 남은 정렬 부분이 없을 때까지 반복한다.

구현

선택 정렬을 이용해 내림차순 정렬을 구현한다.

public class SelectionSort {

    static String testA = "2143";

    public static void main(String[] args) {
        selectionSort(testA);
    }

    public static int selectionSort(String a) {
        // 새 배열의 크기를 파라미터로 넘어온 String의 길이만큼 생성
        int A[] = new int[a.length()];

        // String의 1글자씩 나눠서 배열에 저장
        for (int i=0; i<a.length(); i++) {
            A[i] = Integer.parseInt(a.substring(i, i+1));
        }

        for (int i=0; i<a.length(); i++) {
            int max = i;
            for (int j=i+1; j<a.length(); j++) {
                // 현재 범위에서 Max값 찾기
                if (A[j] > A[max]) {
                    max = j;
                }
            }
            // 현재 i의 값과 Max의 값중 Max값이 더 크면 Swap 수행
            if (A[i] < A[max]) {
                int temp = A[i];
                A[i] = A[max];
                A[max] = temp;
            }
        }

        // 출력
        int result = 0;
        for (int i=0; i<a.length(); i++) {
            result = A[i];
            System.out.println(result);
        }
        return result;
    }
}
저작자표시 (새창열림)

'📚 Data Architect > Algorithm' 카테고리의 다른 글

Quick Sort  (0) 2023.04.14
Insertion Sort  (0) 2023.04.14
Bubble Sort  (0) 2023.04.13
DFS & BFS 구현  (0) 2023.04.13
Stack & Queue 구현  (0) 2023.04.13
  1. 💡 선택 정렬 (Selection Sort)
  2. 과정
  3. 구현
'📚 Data Architect/Algorithm' 카테고리의 다른 글
  • Quick Sort
  • Insertion Sort
  • Bubble Sort
  • DFS & BFS 구현
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      Lock #Thread #Concurrency
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Selection Sort
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.