728x90
반응형
SMALL
파이썬 공부할 겸 알고리즘 문제 풀자고 했당.
버블 정렬 코드 예제
버블 정렬은 인접한 두 값을 비교하면서 큰 값을 뒤로 보내는 방식
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1): # 총 n-1번 반복
for j in range(n - i - 1): # 비교 범위를 점점 줄임
if arr[j] > arr[j + 1]: # 앞이 뒤보다 크면
arr[j], arr[j + 1] = arr[j + 1], arr[j] # 값 교환
return arr
# 테스트
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = bubble_sort(numbers)
print("정렬된 리스트:", sorted_numbers)
코드 분석
- n = len(arr)
배열의 길이를 가져옵니다.
- for i in range(n - 1)
리스트를 반복하면서 마지막 요소는 정렬 범위에서 제외합니다.
- for j in range(n - i - 1)
매 반복마다 가장 큰 값이 뒤로 밀리므로 비교 범위를 점점 줄입니다.
- if arr[j] > arr[j + 1]
현재 값이 다음 값보다 크면 위치를 바꿉니다.
실습
문제 1 : 숫자리스트 [10, 2, 3, 5, 4]를 정렬하세요.
문제 2 : 버블 정렬을 사용해 내림차순 정렬을 하려면 어떻게 수정해야 할까요?
def bubble_sort(arr, descending=False):
n = len(arr)
for i in range(n - 1): # 배열 크기 - 1 만큼 반복
for j in range(n - i - 1): # 정렬 범위 점점 줄이기
if (descending and arr[j] < arr[j + 1]) or (not descending and arr[j] > arr[j + 1]):
# 조건에 따라 값 교환
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 테스트
numbers = [10, 2, 3, 5, 4]
print("오름차순 정렬:", bubble_sort(numbers)) # 오름차순 정렬
print("내림차순 정렬:", bubble_sort(numbers, descending=True)) # 내림차순 정렬
728x90
반응형
LIST
'알고리즘' 카테고리의 다른 글
퀵 정렬과 병합 정렬 효율적인 고급 정렬 알고리즘 완벽 이해 (1) | 2024.12.26 |
---|---|
정렬 알고리즘 완벽 비교 버블, 선택, 삽입 정렬 이해하기 (0) | 2024.12.23 |
탐색 알고리즘 기초 선형 탐색과 이진 탐색 쉽게 이해하기 (0) | 2024.12.22 |
알고리즘 기초: 알고리즘과 자료구조의 시작 (1) | 2024.12.19 |