[알고리즘 / Java] 선택 정렬(Selection Sort)에 대해서

2018. 3. 5. 12:58·Programming/Java Spring
728x90
반응형

  컴퓨터 분야에서는 데이터를 얼마나 효율적이고 빠르게 정렬하는 것에 대한 이슈가 항상 발생해 왔습니다. 그렇기 때문에 정렬에 대한 알고리즘도 필연적으로 정렬을 해야하는 데이터에 따라 어느것이 더 효율적이고 시간 낭비 없이 해결되는지 항상 이슈화가 됐습니다.


  흔히 알고리즘 정렬 코드 종류는 버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 퀵 정렬, 기수 정렬 등 다양한 코드들이 존재합니다. 그 중 간단하면서도 자주 쓰이는 알고리즘 정렬 코드로는 선택 정렬과 삽입 정렬이 있습니다. 이번 포스팅에서는 선택 정렬에 대한 알고리즘에 대해 알아보겠습니다.


  선택 정렬은 제자리 정렬로써 해당 위치[배열]에 들어갈 수를 전체와 비교하면서 정렬하는 방법입니다. 정렬은 오름차순인 경우와 내림차순인 경우에 따라 위치만 바뀔 뿐 전체적인 구조는 변하지 않습니다.

  선택 정렬은 일반적으로 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식입니다. 하나의 예시를 들어 설명해드릴께요.


기본 수  

60 

50 

40 

80 

90 

10 

100 

30 

20 

1회 순환

10 

50 

40 

80 

90 

60 

100 

30 

20

2회 순환 

10 

20 

40 

80 

90 

60 

100 

30 

50 

3회 순환

10 

20 

30 

40

90 

60 

100 

80

50 

4회 순환

10 

20 

30 

40 

50 

60 

100 

80 

90 

5회 순환

10 

20 

30 

40 

50 

60 

100 

80 

90 

6회 순환

10 

20 

30 

40 

50 

60 

100

80 

90 

7회 순환

10 

20 

30 

40 

50 

60 

80 

90 

100 

8회 순환

10 

20 

30 

40 

50 

60 

80 

90 

100


이처럼 선택 정렬의 경우는 이미 정렬이 끝났어도 전체의 수의 n - 1 만큼의 순회를 하게 됩니다. 이와 같은 알고리즘을 코드로 표현해 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SelectionSort {
    public static void main(String args[]) {
        int[] list = {1, 4, 3, 6, 10};
        int indexMin, temp;
 
        for (int i = 0; i < list.length - 1; i++) {
            indexMin = i;
            for (int j = i + 1; j < list.length; j++) {
                if (list[j] < list[indexMin]) {
                    indexMin = j;
                }
            }
            temp = list[indexMin];
            list[indexMin] = list[i];
            list[i] = temp;
        }
        for (int i = 0; i < list.length; i++) {
            System.out.print(list[i] + " ");
        }
    }
}
Colored by Color Scripter
cs



위의 경우의 배열의 순서에 따라 차근차근 값을 비교하면서 값의 위치를 바꿔주는 코드를 표현한 것입니다. 위의 표처럼 가장 마지막의 배열은 굳이 검사할 필요가 없기 때문에 list.length - 1 만큼의 길이만큼만 순회하면서 temp라는 임시 변수에 값을 할당하고, 데이터 값의 대소비교를 통해 위치를 변경하는 코드입니다.

728x90
반응형
저작자표시 (새창열림)

'Programming > Java Spring' 카테고리의 다른 글

[Java] Integer List int 배열로 변환하는 방법  (0) 2022.01.25
[Java] Java 8 LocalDateTime 직렬화 역직렬화 오류 해결 방법  (0) 2021.07.24
[Java] HashSet 사용 방법 및 개념  (0) 2021.06.28
[Java] 컬렉션 프레임워크에 대한 이해  (0) 2017.09.19
[Java / 설치] Eclipse 설치 및 Apache Tomcat 설치 및 연동하기  (0) 2017.08.16
'Programming/Java Spring' 카테고리의 다른 글
  • [Java] Java 8 LocalDateTime 직렬화 역직렬화 오류 해결 방법
  • [Java] HashSet 사용 방법 및 개념
  • [Java] 컬렉션 프레임워크에 대한 이해
  • [Java / 설치] Eclipse 설치 및 Apache Tomcat 설치 및 연동하기
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    반응형
    250x250
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Java
      WPF
      서버 관리
      java8
      투자
      데이터 바인딩
      Kubernetes
      javascript
      재테크
      ES6
      자바스크립트 트릭
      데이터 파이프라인
      이슈 트래킹
      소프트웨어 개발
      협업 도구
      dynamicresource
      클라우드 네이티브
      DevOps
      XAML
      rest api
      분산 메시징 시스템
      Apache Kafka
      투자전략
      웹 개발
      주식투자
      C# WPF
      데이터베이스 성능
      클라우드 컴퓨팅
      마이크로서비스
      docker
    • 최근 댓글

    • 최근 글

    이프로그
    [알고리즘 / Java] 선택 정렬(Selection Sort)에 대해서
    상단으로

    티스토리툴바