Skip to content

Latest commit

Β 

History

History
91 lines (52 loc) Β· 2.65 KB

File metadata and controls

91 lines (52 loc) Β· 2.65 KB

λŒ€ν‘œμ μΈ μ •λ ¬1: 버블 μ •λ ¬ (bubble sort)

1. μ •λ ¬ (sorting) μ΄λž€?

  • μ •λ ¬ (sorting): μ–΄λ–€ 데이터듀이 μ£Όμ–΄μ‘Œμ„ λ•Œ 이λ₯Ό μ •ν•΄μ§„ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•˜λŠ” 것
  • 정렬은 ν”„λ‘œκ·Έλž¨ μž‘μ„±μ‹œ λΉˆλ²ˆν•˜κ²Œ ν•„μš”λ‘œ 함
  • λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ κ³ μ•ˆλ˜μ—ˆμœΌλ©°, μ•Œκ³ λ¦¬μ¦˜ ν•™μŠ΅μ˜ ν•„μˆ˜

λ‹€μ–‘ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 이해λ₯Ό 톡해, λ™μΌν•œ λ¬Έμ œμ— λŒ€ν•΄ λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ κ³ μ•ˆλ  수 μžˆμŒμ„ μ΄ν•΄ν•˜κ³ , 각 μ•Œκ³ λ¦¬μ¦˜κ°„ μ„±λŠ₯ 비ꡐλ₯Ό 톡해, μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ 뢄석에 λŒ€ν•΄μ„œλ„ 이해할 수 있음



2. 버블 μ •λ ¬ (bubble sort) λž€?

  • 두 μΈμ ‘ν•œ 데이터λ₯Ό λΉ„κ΅ν•΄μ„œ, μ•žμ— μžˆλŠ” 데이터가 뒀에 μžˆλŠ” 데이터보닀 크면, 자리λ₯Ό λ°”κΎΈλŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜

직접 눈으둜 보면 더 이해가 쉽닀: https://visualgo.net/en/sorting

좜처: https://en.wikipedia.org/wiki/Bubble_sort



3. μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„

  • 특이점 찾아보기
    • n개의 λ¦¬μŠ€νŠΈκ°€ μžˆλŠ” 경우 μ΅œλŒ€ n-1번의 λ‘œμ§μ„ μ μš©ν•œλ‹€.
    • λ‘œμ§μ„ 1번 μ μš©ν•  λ•Œλ§ˆλ‹€ κ°€μž₯ 큰 μˆ«μžκ°€ λ’€μ—μ„œλΆ€ν„° 1κ°œμ”© κ²°μ •λœλ‹€.
    • 둜직이 κ²½μš°μ— 따라 일찍 끝날 μˆ˜λ„ μžˆλ‹€. λ”°λΌμ„œ λ‘œμ§μ„ μ μš©ν•  λ•Œ ν•œ λ²ˆλ„ 데이터가 κ΅ν™˜λœ 적이 μ—†λ‹€λ©΄ 이미 μ •λ ¬λœ μƒνƒœμ΄λ―€λ‘œ 더 이상 λ‘œμ§μ„ 반볡 μ μš©ν•  ν•„μš”κ°€ μ—†λ‹€.

  • Logic
  1. for num in range(len(data_list)) 반볡
  2. swap = 0 (κ΅ν™˜μ΄ λ˜μ—ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” λ³€μˆ˜λ₯Ό λ‘μž)
  3. 반볡문 μ•ˆμ—μ„œ, for index in range(len(data_list) - num - 1) n - 1번 λ°˜λ³΅ν•΄μ•Ό ν•˜λ―€λ‘œ
  4. λ°˜λ³΅λ¬Έμ•ˆμ˜ 반볡문 μ•ˆμ—μ„œ, if data_list[index] > data_list[index + 1] 이면
  5.            data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
    
  6.            swap += 1
    
  7. 반볡문 μ•ˆμ—μ„œ, if swap == 0 이면, break 끝

python

def bubblesort(data):
    for index in range(len(data) - 1):
        swap = False
        for index2 in range(len(data) - index - 1):
            if data[index2] > data[index2 + 1]:
                data[index2], data[index2 + 1] = data[index2 + 1], data[index2]
                swap = True
        
        if swap == False:
            break
    return data
    
import random

data_list = random.sample(range(100), 50)
print (bubblesort(data_list))

C++



4. μ•Œκ³ λ¦¬μ¦˜ 뢄석