1. 선택 정렬

2023. 10. 25. 17:17·알고리즘/Sorting and Searching(정렬, 이분검색, 결정알고리즘

1. 문제

선택정렬

 

2. 나의 풀이

선택 정렬은 배열의 최솟값을 찾아 앞으로 보내고 그 다음 최솟값을 찾아 그 다음칸으로 보내는 정렬이다.

즉 계속 최솟값을 찾아내 순서대로 정렬시킨다.

사진 출처:https://plavement.tistory.com/48

 

 

이중 for문을 돌면 된다.

필요한 변수들은

최솟값을 저장할 min

최솟값의 인덱스를 저장할 index

1. min, index가 필요하다

2. 두번 째 for문이 끝나면 최솟값과 맨 앞을 swap 한다.

 

 

편의상 나의 코드와 강의 코드를 같이 업로드

3. 강의

package Sort;

import java.util.*;

//최솟값을 탐색해 앞에 배치하는 정렬이다.
public class Sort_01_selection {
    public static int[] solution(int[] arr) {
        //내가 선택정렬 원리만 보고 짠 코드
        for (int i = 0; i < arr.length; i++) {
            int min = arr[i]; //min을 갱신해줘야한다!
            int index = i; //최솟값의 인덱스
            for (int j = i+1; j < arr.length; j++) { //최솟값을 찾는 과정
                if (arr[j] < min) {
                    min = arr[j];
                    index = j;
                }
            } 
            //저장된 min와 index를 위치 swap
            int tmp = arr[i];
            arr[i] = min;
            arr[index] = tmp;
        }


/*        //강의 코드
		  //강의 처럼 굳이 min 값을 저장하지 않고 최솟값의 인덱스만 알고 swap하면 더 간결하다.
        for (int i = 0; i < arr.length; i++) {
            int index = i;
            for (int j = i + 1; j < arr.length; j++) {
                if(arr[j] < arr[i]) index = j;
            }
            int tmp = arr[i];
            arr[i] = arr[index];
            arr[index] = tmp;
        }*/

        return arr;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) arr[i] = sc.nextInt();

        for (int x : solution(arr)) System.out.print(x + " ");

    }
}

 

4. 얻어갈 점

1. for문이 끝날 때 필요한 값들을 다시 초기화 해주는 걸 잊지말자.

'알고리즘 > Sorting and Searching(정렬, 이분검색, 결정알고리즘' 카테고리의 다른 글

6. 장난꾸러기  (1) 2023.10.28
5. 중복 확인  (1) 2023.10.25
4. ★★ Least Recently Used (LRU)  (0) 2023.10.25
3. 삽입 정렬  (0) 2023.10.25
2. 버블 정렬  (0) 2023.10.25
'알고리즘/Sorting and Searching(정렬, 이분검색, 결정알고리즘' 카테고리의 다른 글
  • 5. 중복 확인
  • 4. ★★ Least Recently Used (LRU)
  • 3. 삽입 정렬
  • 2. 버블 정렬
송우석입니다
송우석입니다
  • 송우석입니다
    송우석
    송우석입니다
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (136) N
      • JAVA (1)
      • 알고리즘 (83) N
        • 백준 (8)
        • String(문자열) (12) N
        • Array(1, 2차원 배열) (12)
        • Two pointers, Sliding windo.. (6)
        • HashMap, TreeSet(해쉬, 정렬지원 S.. (5)
        • Stack, Queue(자료구조) (8)
        • Sorting and Searching(정렬, 이.. (10)
        • Recursive, Tree, Graph(DFS,.. (14)
        • DFS, BFS 활용 (6)
        • 다시 시작! (1)
        • 기초 수학 (1) N
      • 일상 (19)
      • Github (1)
      • MSA 공부 (3)
      • 경제, 금융, 디지털, 시사 (3)
      • 라즈베리파이 (10)
      • 프로젝트에서 일어난 일 (13)
      • FrontEnd 공부 (3) N
        • React (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
송우석입니다
1. 선택 정렬
상단으로

티스토리툴바