관리 메뉴

Daehyunii's Dev-blog

08 선택 μ •λ ¬ λ³Έλ¬Έ

πŸ“š Language & CS knowledge/Algorithm & Data structure

08 선택 μ •λ ¬

Daehyunii 2022. 8. 7. 22:35

8.1 선택 μ •λ ¬ μ†Œκ°œ

  선택 정렬은 버블 μ •λ ¬κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ μ•½κ°„μ˜ μ •λ ¬ 방식에 차이점이 μžˆλ‹€. λ§Žμ€ μŠ€μ™‘μ„ ν†΅ν•΄μ„œ κ°€μž₯ 큰 값을 맨 뒀에 μœ„μΉ˜μ‹œν‚€λŠ” λŒ€μ‹ , ν•œ λ²ˆμ— λͺ¨λ“  μš”μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ κ°€μž₯ μž‘μ€ 값을 맨 μ•žμ— μœ„μΉ˜μ‹œν‚¨λ‹€. 그리고 κ·Έ μš”μ†Œλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μš”μ†Œλ“€μ„ λ‹€ λΉ„κ΅ν•˜μ—¬ κ°€μž₯ κ·Έ 쀑 κ°€μž₯ μž‘μ€ 값을 첫 λ²ˆμ§Έμ— μ •λ ¬λœ μš”μ†Œ λ‹€μŒμ— μœ„μΉ˜μ‹œν‚¨λ‹€. 즉 λ°°μ—΄λ‚΄μ˜ μš”μ†Œλ“€ 쀑 μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„ λ§ˆμ§€λ§‰μ— λ°”κΎΈμ–΄ 맨 μ•žμ— μ •λ ¬μ‹œν‚¨λ‹€. 

 

  μš°μ„  비ꡐλ₯Ό ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 비ꡐ해야 ν•  μš”μ†Œλ“€ 쀑 κ°€μž₯ μ•žμ— μžˆλŠ” 값을 μ΅œμ†Ÿκ°’μœΌλ‘œ 작고 κ·Έ λ‹€μŒ μš”μ†Œλ“€κ³Όμ˜ 비ꡐλ₯Ό 톡해 μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ”λ‹€. μ΄λ ‡κ²Œ 찾은 μ΅œμ†Ÿκ°’μ€ λ°°μ—΄μ˜ 맨 μ•žμ— μ •λ ¬μ‹œν‚€κ³ , κ·Έ λ‹€μŒ λ£¨ν”„μ—μ„œλŠ” μ œμ™Έμ‹œν‚€κ³  λ‚˜λ¨Έμ§€λ₯Ό λΉ„κ΅ν•œλ‹€. 이 과정을 λ°˜λ³΅ν•˜μ—¬ μ •λ ¬ν•˜λŠ” 방식이 선택 정렬이닀. 선택 정렬은 말 κ·ΈλŒ€λ‘œ μ΅œμ†Ÿκ°’μ„ μ„ νƒν•˜μ—¬ μ•žμ—μ„œ λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ μœ„μΉ˜μ‹œμΌœ μ •λ ¬μ‹œν‚€λŠ” 방법이닀. 선택 정렬도 버블 μ •λ ¬κ³Ό λ§ˆμ°¬κ°€μ§€κ³  μŠ€μ™‘μ„ ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 버블 μ •λ ¬μ—μ„œ λ§Œλ“€μ–΄ 놓은 μŠ€μ™‘ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•  것이닀.

 

μ˜μ‚¬μ½”λ“œ

1. ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  배열을 인수둜 λ°›λŠ”λ‹€.

2. μ΅œμ†Ÿκ°’μ„ μ €μž₯ν•  λ³€μˆ˜λ₯Ό λ§Œλ“ λ‹€.

3. 처음 μ‹œμž‘μ€ μ •λ ¬μ˜ 첫 번째 μš”μ†Œκ°€ κ°€μž₯ μž‘μ€ κ°’μΈκ²ƒμœΌλ‘œ μ €μž₯ν•˜κ³  μ‹œμž‘ν•œλ‹€.

4. 그런 λ‹€μŒ λ°˜λ³΅λ¬Έμ„ 톡해 λ‹€μŒ μš”μ†Œμ™€ λΉ„κ΅ν•œλ‹€.

5. λ§Œμ•½ ν•΄λ‹Ή μš”μ†Œλ³΄λ‹€ κ·Έ λ‹€μŒ μš”μ†Œμ˜ 값이 더 μž‘μ„ 경우 λ‹€μŒ μš”μ†Œλ₯Ό μ΅œμ†Ÿκ°’μ„ μ €μž₯ν•œ λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€.

6. λ°˜λŒ€λ‘œ μž‘μ§€ μ•Šλ‹€λ©΄ 계속 λ°˜λ³΅λ¬Έμ„ μ§„ν–‰ν•œλ‹€.

7. μ£Όμ˜ν•΄μ•Ό ν•  점은 μ΅œμ†Ÿκ°’μ„ μ €μž₯ν•˜λŠ” λ³€μˆ˜μ— μ €μž₯λ˜λŠ” 것은 κ°’ κ·Έ μžμ²΄κ°€ μ•„λ‹ˆλΌ ν•΄λ‹Ή κ°’μ˜ 인덱슀λ₯Ό μ €μž₯ν•˜λŠ” 것이닀!!

8. λ£¨ν”„μ˜ ν•œλ°”ν€΄κ°€ 돌면 κ°€μž₯ μ•žμ— μ΅œμ†Ÿκ°’μ„ μ •λ ¬ν•œλ‹€.

9. κ°€μž₯ μ€‘μš”ν•œ 점은 λ£¨ν”„μ˜ ν•œ 바퀴가 λŒκ³ λ‚˜λ©΄ κ°€μž₯ μž‘μ€ μ΅œμ†Ÿκ°’μ€ κ°€μž₯ μ•žμ— μ •λ ¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ κ·Έ λ‹€μŒ 루프가 λŒμ•„κ°ˆλ•ŒλŠ” κ°€μž₯ μ•žμ— μžˆλŠ” 값을 μ œμ™Έν•˜κ³  비ꡐ가 이뀄져야 ν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ–Έμ œλ‚˜ 같은 μ΅œμ†Ÿκ°’μ„ 찾게 λœλ‹€.

 

8.2 선택 μ •λ ¬ κ΅¬ν˜„

function selectionSort(arr){
for(let i = 0 ; i < arr.length ; i++){
    let min = i;
    for(let j = i + 1 ; j < arr.length ; j++){
        if(arr[j] < arr[min]){
            min = j;
        }
    }
    if(arr[i] !== arr[min]){
        let temp = arr[i];
        arr[i] = arr[min];
        arr[min] = temp;
    }
}
return arr;

  μŠ€μ™‘ μ•Œκ³ λ¦¬μ¦˜μ— 쑰건문을 단 μ΄μœ λŠ” arr[i]와 arr[min]이 같은 값이라면, 이미 μ΅œμ†Ÿκ°’μ΄ μ œλŒ€λ‘œ μ •λ ¬λ˜μ–΄ μžˆλŠ” 것이기 λ•Œλ¬Έμ— μŠ€μ™‘μ„ ν•  ν•„μš”κ°€ μ—†λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 쑰건문으둜 λ‹€λ₯Έ κ²½μš°μ— μŠ€μ™‘μ΄ 일어날 수 μžˆλ„λ‘ μž‘μ„±ν•œκ²ƒμ΄λ‹€.

 

'πŸ“š Language & CS knowledge > Algorithm & Data structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

10 합병 μ •λ ¬  (0) 2022.08.07
09 μ‚½μž… μ •λ ¬  (0) 2022.08.07
07 버블 μ •λ ¬  (0) 2022.08.06
06 검색 μ•Œκ³ λ¦¬μ¦˜  (0) 2022.08.05
05 μž¬κ·€  (0) 2022.08.04