• 티스토리 홈
  • 프로필사진
    KIMJAVAN
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
KIMJAVAN
  • 프로필사진
    KIMJAVAN
    • 개발 (160)
      • 마크업 언어 (19)
        • HTML (7)
        • CSS (12)
      • 자바스크립트 (85)
        • JavaScript (34)
        • JS Library (6)
        • React (13)
        • threeJS (6)
        • TypeScript (2)
        • Next js (5)
        • Node JS (18)
        • webGL (1)
      • AI (4)
        • chat-gpt (4)
      • flutter (17)
        • dart (11)
        • flutter (6)
      • Sql (3)
      • PHP (4)
      • Python (2)
      • Git (4)
      • vscode (1)
      • 개발 도움 사이트 (7)
      • 작업기록 (1)
      • 오류 모음 (3)
      • 메모장 (7)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [JavaScript] 선택정렬
        2025년 01월 11일
        • KIMJAVAN
        • 작성자
        • 2025.01.11.:32
        728x90

        선택 정렬 (Selection Sort)

        선택 정렬은 가장 작은 값을 선택해 배열의 맨 앞에 놓는 과정을 반복하며 배열을 정렬하는 간단한 알고리즘입니다.
        "최솟값을 찾아서 제자리로 옮긴다"는 점에서 이름이 유래되었습니다.


        동작 원리

        1. 최솟값 찾기: 배열에서 아직 정렬되지 않은 부분의 최솟값을 찾습니다.
        2. 교환: 찾은 최솟값을 현재 정렬 위치의 첫 요소와 교환합니다.
        3. 반복: 배열이 정렬될 때까지 1~2 단계를 반복합니다.

        장단점

        • 장점: 구현이 매우 쉽다. 데이터 이동 횟수가 적어, 교환이 적은 환경에 적합하다.
        • 단점: 시간 복잡도가 비효율적이다 (O(n2)O(n^2)O(n2)).
        • 적합한 경우: 데이터 양이 적거나 교환 비용이 높은 경우.

        예시 코드 (JavaScript로 구현)

        1. 오름차순 선택 정렬

        const selectionSort = (array) => {
          const arr = array.slice(); // 원본 배열 복사
          const n = arr.length;
        
          for (let i = 0; i < n - 1; i++) {
            let minIndex = i; // 최솟값의 인덱스 초기화
        
            for (let j = i + 1; j < n; j++) {
              if (arr[j] < arr[minIndex]) {
                minIndex = j; // 최솟값의 인덱스 갱신
              }
            }
        
            // 최솟값과 현재 위치를 교환
            if (minIndex !== i) {
              [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
            }
          }
        
          return arr;
        };
        
        const an = [5, 1, 4, 2, 8];
        console.log(selectionSort(an)); // [1, 2, 4, 5, 8]

         

        2. 내림차순 선택 정렬

        const selectionSortDesc = (array) => {
          const arr = array.slice();
          const n = arr.length;
        
          for (let i = 0; i < n - 1; i++) {
            let maxIndex = i; // 최댓값의 인덱스 초기화
        
            for (let j = i + 1; j < n; j++) {
              if (arr[j] > arr[maxIndex]) {
                maxIndex = j; // 최댓값의 인덱스 갱신
              }
            }
        
            // 최댓값과 현재 위치를 교환
            if (maxIndex !== i) {
              [arr[i], arr[maxIndex]] = [arr[maxIndex], arr[i]];
            }
          }
        
          return arr;
        };
        
        const an = [5, 1, 4, 2, 8];
        console.log(selectionSortDesc(an)); // [8, 5, 4, 2, 1]

         

        선택 정렬 동작 예시

        배열: [5, 1, 4, 2, 8] (오름차순 정렬)

        1단계:

        • 최솟값 찾기: 배열 [5, 1, 4, 2, 8]에서 1
        • 교환: 1 ↔ 5 → [1, 5, 4, 2, 8]

        2단계:

        • 최솟값 찾기: 배열 [5, 4, 2, 8]에서 2
        • 교환: 2 ↔ 5 → [1, 2, 4, 5, 8]

        3단계:

        • 최솟값 찾기: 배열 [4, 5, 8]에서 4
        • 교환: 그대로 → [1, 2, 4, 5, 8]

        4단계:

        • 최솟값 찾기: 배열 [5, 8]에서 5
        • 교환: 그대로 → [1, 2, 4, 5, 8]

        시간 복잡도

        • 최선, 최악, 평균 모두: O(n2)O(n^2)O(n2)
          • 항상 nnn번의 비교가 필요하기 때문.

        '자바스크립트 > JavaScript' 카테고리의 다른 글

        [JavaScript] 합병정렬  (0) 2025.01.11
        [JavaScript] 삽입정렬  (0) 2025.01.11
        [JavaScript] 버블정렬  (0) 2025.01.11
        [JavaScript] bigO  (0) 2025.01.11
        [JavaScript] 알고리즘 공부기록 : 팩토리얼 / 법칙  (1) 2025.01.11
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바