Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Sequelize
- Dinosaur
- class
- 자료구조
- jest
- Queue
- JavaScript
- TypeScript
- typeORM
- dfs
- nestjs
- react
- flask
- Nest.js
- 공룡게임
- mongoose
- 정렬
- OCR
- 게임
- Bull
- GIT
- Express
- game
- MySQL
- Python
- cookie
- AWS
- MongoDB
- nodejs
Archives
- Today
- Total
포시코딩
버블 정렬 (Bubble Sort) 본문
728x90
정렬이란?
데이터를 순서대로 나열하는 방법을 의미.
이진 탐색을 가능하게도 하고, 데이터를 조금 더 효율적으로 탐색할 수 있게도 한다.
버블 정렬
버블 정렬은 첫 번째 자료와 두 번째 자료, 두 번째 자료와 세 번째 자료, ... 이런식으로
(n - 1) 번째 자료와 n 번째 자료를 비교하여 교환하면서 자료를 정렬하는 방식이다.
ex) 첫 루프에서 두 개씩 비교해서 끝까지 가면 제일 큰 수가 마지막에 위치하게 된다.
이제 마지막 수는 고려하지 않아도 되므로 제외하고 다시 처음부터 마지막-1 번째까지 두 개씩 비교하고
다시 마지막-1 번째도 제외하고.. 를 반복해서 정렬시키는 방식이다.
코드로 구현해보자
input = [4, 6, 2, 9, 1]
위와 같은 숫자로 이루어진 배열이 있을 때 버블 정렬을 통해 정렬을 한다면 어떻게 코드를 짜야할까?
arr = [4, 6, 2, 9, 1]
# 0 1 2 3 0 1 2 0 1 0
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(n - i - 1):
print(j)
bubble_sort(arr)
이렇게 연달아 출력되는데 이는 우리가 비교하기 위해 구하려는 인덱스와 같다는걸 알 수 있다.
(j와 j+1 인덱스를 비교해 위치 교환)
이를 응용하면 다음과 같다.
input = [4, 6, 2, 9, 1]
def bubble_sort(arr):
n = len(arr)
for i in range(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
bubble_sort(input)
print(input)
버블 정렬의 시간 복잡도
버블 정렬은 2차 반복문이 나왔고, array의 길이 만큼 반복하고 있으므로 O(N2)의 시간 복잡도를 가진다고 볼 수 있다.
728x90
'자료구조알고리즘 > 이론' 카테고리의 다른 글
삽입 정렬 (Insertion Sort) (0) | 2022.11.25 |
---|---|
선택 정렬 (Selection Sort) (0) | 2022.11.25 |
재귀 함수 - 팩토리얼!, 회문 검사 (0) | 2022.11.24 |
이진 탐색(Binary Search), 시간 복잡도 O(log N) (0) | 2022.11.24 |
Linked List 구현 using class in Python (2) (0) | 2022.11.23 |