Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

선택 μ •λ ¬(Selection Sort)
πŸ“‚ 자료ꡬ쑰/μ •λ ¬

선택 μ •λ ¬(Selection Sort)

2023. 3. 4. 20:25

  선택 정렬은 μ—¬λŸ¬ κ°€μ§€ λ©΄μ—μ„œ μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ 버블 μ •λ ¬κ³Ό μƒλ‹Ήνžˆ λΉ„μŠ·ν•˜λ‹€. 두 κ°€μ§€ μ •λ ¬ 방법을 κ΅¬λΆ„ν•˜λŠ” 게 μ–΄λ ΅μ§€λŠ” μ•ŠμœΌλ‹ˆ, 선택 정렬을 κ³΅λΆ€ν•˜λŠ” 김에 버블 정렬도 같이 κ³΅λΆ€ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€.

1. μ •μ˜ 🎿

선택 μ •λ ¬

  선택 정렬은 μ›μ†Œλ₯Ό 넣을 μœ„μΉ˜λŠ” 이미 μ •ν•΄μ Έ 있고, μ–΄λ–€ μ›μ†Œλ₯Ό 넣을지 μ„ νƒν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

 

2. λ™μž‘ 방식 🧦

  N개의 μ›μ†Œκ°€ μžˆλ‹€κ³  ν•˜μž.
  μš°μ„ , λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ”λ‹€. 그리고 첫 번째 μ›μ†Œμ™€ λ°°μ—΄μ—μ„œ 찾은 μ΅œμ†Ÿκ°’μ˜ μ›μ†Œλ₯Ό λ°”κΏ”μ€€λ‹€. 이것이 1νšŒμ „ μˆ˜ν–‰ν•œ 것이닀. μ΄λ ‡κ²Œ 되면 λ°°μ—΄μ˜ 첫 λ²ˆμ§Έμ— μœ„μΉ˜ν•œ μ›μ†Œκ°€ κ°€μž₯ μž‘μ€ 값을 κ°€μ§€κ²Œ λœλ‹€. 
  2νšŒμ „μ„ μˆ˜ν–‰ν•  λ•ŒλŠ” 첫 번째 μ›μ†Œλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λ°°μ—΄λ“€ μ€‘μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ”λ‹€. 그리고 ν•΄λ‹Ή μ›μ†Œμ™€ λ°°μ—΄μ˜ 두 번째 μ›μ†Œλ₯Ό λ°”κΏ”μ€€λ‹€. 이와 같은 λ°©μ‹μœΌλ‘œ (N -1) νšŒμ „κΉŒμ§€ μˆ˜ν–‰ν•˜λ©΄ 정렬이 λ§ˆλ¬΄λ¦¬λœλ‹€.
  μœ„μ˜ 방식은 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정렬을 ν•˜κ³  μžˆλ‹€. λ§Œμ•½ λ°°μ—΄ μ€‘μ—μ„œ μ΅œμ†Ÿκ°’μ΄ μ•„λ‹Œ μ΅œλŒ“κ°’μ„ μ°Ύμ•„μ„œ μ •λ ¬ν•œλ‹€λ©΄ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•  수 μžˆλ‹€.

 

3. κ΅¬ν˜„(JAVA) πŸ‘‘

void selectionSort(int[] arr) {
    int indexMin, temp;

    // (μ›μ†Œμ˜ 개수 - 1)번 반볡
    for(int i = 0; i < arr.length - 1; i++) {
        // μ£Όμ–΄μ§„ λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’ μ›μ†Œμ˜ 인덱슀 번호 μ°ΎκΈ°
        indexMin = i;
        for(int j = i + 1; j < arr.length; j++) {
            if(arr[j] < arr[indexMin]) {
                indexMin = j;
            }
        }

        // 이미 μ •ν•΄μ ΈμžˆλŠ” κ΅ν™˜ μœ„μΉ˜μ˜ κ°’κ³Ό μ΅œμ†Ÿκ°’ κ΅ν™˜
        temp = arr[indexMin];
        arr[indexMin] = arr[i];
        arr[i] = temp;
    }
}

 

4. μ‹œκ°„λ³΅μž‘λ„ & κ³΅κ°„λ³΅μž‘λ„ πŸ‘ 

1. μ‹œκ°„λ³΅μž‘λ„

  μœ„μ—μ„œ μ‚΄νŽ΄λ³΄μ•˜λ“―μ΄ 총 (N - 1)번 νšŒμ „ν•˜κ³ , i번째 νšŒμ „μ—μ„œ (N - i)의 연산을 μˆ˜ν–‰ν•œλ‹€. 그러면, μ•„λž˜μ— ν•΄λ‹Ήν•˜λŠ” 수만큼 연산을 μˆ˜ν–‰ν•˜κ²Œ λœλ‹€.

(N - 1) + (N - 2) + ... + 2 + 1 = N * (N - 1) / 2

  λ”°λΌμ„œ, μ‹œκ°„λ³΅μž‘λ„λŠ” O(N^2)이닀.
  정렬이 λ˜μ–΄μžˆλ˜ μ•ˆλ˜μ–΄ 있던 항상 비ꡐλ₯Ό μˆ˜ν–‰ν•˜λ―€λ‘œ μ΅œμ„ , 평균, μ΅œμ•…μ˜ μƒν™©μ—μ„œ λͺ¨λ‘ O(N^2)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

  μ΅œμ„ (BEST) 평균(AVERAGE) μ΅œμ•…(WORST)
μ‹œκ°„λ³΅μž‘λ„ O(N^2) O(N^2) O(N^2)

2. κ³΅κ°„λ³΅μž‘λ„

κ³΅κ°„λ³΅μž‘λ„μ˜ κ²½μš° μΆ”가적인 λ°°μ—΄μ„ λ§Œλ“€μ§€ μ•Šκ³  ν•΄λ‹Ή λ°°μ—΄μ—μ„œ κ΅ν™˜μ΄ μ΄λ£¨μ–΄μ§€λ―€λ‘œ O(N)이닀.

 

5. μž₯점 & 단점 🦢

1. μž₯점

  • μ½”λ“œκ°€ λ§€μš° λ‹¨μˆœν•˜λ‹€.
  • λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간을 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€.

2. 단점

  • μ‹œκ°„λ³΅μž‘λ„κ°€ O(N^2)μ΄λ―€λ‘œ μƒλ‹Ήνžˆ λΉ„νš¨μœ¨μ μ΄λ‹€.
  • 정렬이 λ˜μ–΄μžˆλ”라도 λΉ„ꡐ μ—°μ‚°μ„ μˆ˜ν–‰ν•œλ‹€.

 

ν•΄λ‹Ή 글은 Gyoogleλ‹˜μ˜ 선택 μ •λ ¬(Selection Sort)을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

'πŸ“‚ 자료ꡬ쑰 > μ •λ ¬' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

νž™ μ •λ ¬ (Heap Sort)  (0) 2023.03.12
μœ„μƒ μ •λ ¬(Topology Sort)  (2) 2023.03.07
병합 μ •λ ¬(Merge Sort)  (0) 2023.03.07
μ‚½μž… μ •λ ¬(Insertion Sort)  (0) 2023.03.06
버블 μ •λ ¬(Bubble Sort)  (0) 2023.03.04
    'πŸ“‚ 자료ꡬ쑰/μ •λ ¬' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • μœ„μƒ μ •λ ¬(Topology Sort)
    • 병합 μ •λ ¬(Merge Sort)
    • μ‚½μž… μ •λ ¬(Insertion Sort)
    • 버블 μ •λ ¬(Bubble Sort)
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”