관리 메뉴

Daehyunii's Dev-blog

09 μ‚½μž… μ •λ ¬ λ³Έλ¬Έ

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

09 μ‚½μž… μ •λ ¬

Daehyunii 2022. 8. 7. 23:05

9.1 μ‚½μž… μ •λ ¬ μ†Œκ°œ

  μ‚½μž… μ •λ ¬μ΄λž€, λ°°μ—΄μ˜ μ™Όμͺ½ 끝의 숫자λ₯Ό 정렬이 끝났닀고 κ°„μ£Όν•œλ‹€. 그리고 아직 μž‘μ—…ν•˜μ§€ μ•Šμ€ 숫자 μ€‘μ—μ„œ μ™Όμͺ½ 끝에 μžˆλŠ” 숫자λ₯Ό κΊΌλ‚΄μ„œ μ™Όμͺ½μ— μžˆλŠ” μž‘μ—…μ΄ λλ‚œ μˆ«μžμ™€ λΉ„κ΅ν•œλ‹€. μ™Όμͺ½μ˜ μˆ«μžκ°€ 크닀면 두 개의 숫자λ₯Ό λ°”κΎΌλ‹€. 이 μž‘μ—…μ„ μžμ‹ λ³΄λ‹€ μž‘μ€ μˆ«μžκ°€ λ‚˜νƒ€λ‚˜κ±°λ‚˜ μ™Όμͺ½ 끝에 도달할 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•˜μ—¬ μ •λ ¬ν•˜λŠ” 방법이닀. 말 κ·ΈλŒ€λ‘œ μ‚½μž… 정렬은 κ°€μž₯ μ™ΌνŽΈμ˜ 값을 정렬이 μ™„λ£Œλ˜μ–΄ μžˆλŠ” κ°’μœΌλ‘œ 보고 λ‚˜λ¨Έμ§€ μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© 꺼내와 μ •λ ¬λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•œ μ™ΌνŽΈμ˜ μš”μ†Œλ“€κ³Ό λΉ„κ΅ν•˜μ—¬ μ •λ ¬λ˜μ–΄μ•Ό ν•˜λŠ” μœ„μΉ˜μ— μ‚½μž…ν•˜λŠ” 방식이닀.

 

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

1. λ°°μ—΄μ˜ 두 번째 μš”μ†Œλ₯Ό μ„ νƒν•˜μ—¬ λ°˜λ³΅μ„ μ‹œμž‘ν•œλ‹€.(μ™œλƒν•˜λ©΄ κ°€μž₯ μ•žμ— μžˆλŠ” μš”μ†ŒλŠ” 정렬이 μ™„λ£Œλ˜μ—ˆλ‹€κ³  κ°„μ£Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.)

2. κ·Έ λ‹€μŒ 두 번째 μš”μ†Œλ₯Ό μ·¨ν•˜μ—¬ μ•žμ— μžˆλŠ” κ°’κ³Ό λΉ„κ΅ν•œλ‹€. 그리고 μ•žμ— μžˆλŠ” 값이 더 크닀면 두 값을 μŠ€μ™‘ν•œλ‹€.

3. 이 과정을 λ°˜λ³΅ν•œλ‹€.

 

9.2 μ‚½μž… μ •λ ¬ κ΅¬ν˜„

function insertionSoort(arr){
    for(var i = 1 ; i < arr.length ; i++){
        var presentValue = arr[i];
        for(var j = i - 1 ; j >=0 && arr[j] > presentValue ; j--){
            arr[j+1] = arr[j];
        }
        arr[j+1] = presentValue;
    }
    return arr;
}

  λ°˜λ³΅λ˜λŠ” jλŠ” 이미 정렬이 μ™„λ£Œλœ μ™Όμͺ½μ˜ μš”μ†Œλ“€μ„ λ°˜λ³΅μ‹œμΌœμ£ΌλŠ” 것이닀. 그렇기에 jλŠ” λΉ„κ΅ν•˜κΈ° μœ„ν•΄ 꺼내진 i인덱슀λ₯Ό 가진 μš”μ†Œμ˜ μΈλ±μŠ€μ— -1을 ν•œ κ°’λΆ€ν„° μ‹œμž‘λ˜λŠ” 것이고 jλŠ” 0번 μΈλ±μŠ€λ³΄λ‹€λŠ” 컀야 ν•˜λ―€λ‘œ 쑰건을 λ§Œλ“€μ—ˆκ³ , j의 값이 ν˜„μž¬ λΉ„κ΅ν•˜κ³ μž 꺼내놓은 값보닀 큰 κ²½μš°μ— μŠ€μ™‘μ΄ μΌμ–΄λ‚˜λŠ” 것이닀. 그리고 λ§Œμ•½ 쀑첩 반볡문 루프가 λŒλ‹€κ°€ 쑰건식이 false인 κ²½μš°μ—λŠ” νŠ•κ²¨μ Έ λ‚˜μ˜¨ jλŠ” 정렬이 된 뢀뢄을 가리킀기 λ•Œλ¬Έμ— j+1을 ν•˜μ—¬ presentValue 값을 ν• λ‹Ήν•΄ μ€€λ‹€. 

 

9.2 λΉ…μ˜€ ν‘œκΈ°λ²• 비ꡐ

μ§€κΈˆκΉŒμ§€ 배운 일반적인 정렬듀인 버블 μ •λ ¬, 선택 μ •λ ¬, μ‹œκ°„ μ •λ ¬μ˜ λΉ…μ˜€ ν‘œκΈ°λ²•μ„ 비ꡐ해 보자면

μ•Œκ³ λ¦¬μ¦˜ μ‹œκ°„ λ³΅μž‘λ„(Best) μ‹œκ°„ λ³΅μž‘λ„(Average) μ‹œκ°„ λ³΅μž‘λ„(Worst) 곡간 λ³΅μž‘λ„
버블 μ •λ ¬ O(n) O(n^2) O(n^2) O(1)
선택 μ •λ ¬ O(n) O(n^2) O(n^2) O(1)
μ‚½μž… μ •λ ¬ O(n^2) O(n^2) O(n^2) O(1)

  κ°€μž₯ 베슀트인 κ²½μš°μ—λŠ” O(n)μ‹œκ°„ λ³΅μž‘λ„ κΉŒμ§€ λ‚˜μ˜€λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜λ„ μ‘΄μž¬ν•˜μ§€λ§Œ ν‰κ· μ μœΌλ‘œλŠ” O(n^2)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°–λŠ”λ‹€. 이말은 λ‹€μ‹œ λ§ν•˜λ©΄ κ·Έλ ‡κ²Œ νš¨μœ¨μ μ΄μ§€ μ•Šλ‹€λŠ” 것이닀. μ•žμœΌλ‘œ 배울 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜λ“€κ³Ό 비ꡐ해 λ³Έλ‹€λ©΄ μ–Όλ§ˆλ‚˜ λΉ„νš¨μœ¨μ μΌ 수 μžˆλŠ”μ§€ μ •ν™•ν•˜κ²Œ μ•Œ μˆ˜μžˆλ‹€.

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

11 퀡 μ •λ ¬  (0) 2022.08.08
10 합병 μ •λ ¬  (0) 2022.08.07
08 선택 μ •λ ¬  (0) 2022.08.07
07 버블 μ •λ ¬  (0) 2022.08.06
06 검색 μ•Œκ³ λ¦¬μ¦˜  (0) 2022.08.05