버블 정렬(거품 정렬, Bubble Sort)은 가장 간단한 정렬 알고리즘 입니다. 시간 복잡도는 O(n²)로 느립니다. Javascript(자바스크립트)와 Python(파이썬)으로 만들어 봤습니다.
Javascript 버블 정렬
기본적인 오름차순 정렬입니다.
function bubbleSort(ar) {
for (var i = ar.length - 1; i > 0; i--) {
for (var j = 0; j < i; j++) {
if (ar[j] > ar[j+1]) {
[ar[j], ar[j+1]] = [ar[j+1], ar[j]];
}
}
}
}
var ar = [24, 55, -2, 100, 0, 1, 7];
bubbleSort(ar);
console.log(ar);
Javascript 버블 정렬 - 비교함수 사용
비교함수를 인수로 전달하는 방식입니다. 내림차순으로 해봤습니다.
function bubbleSort(ar, compare) {
for (var i = ar.length - 1; i > 0; i--) {
for (var j = 0; j < i; j++) {
if (compare(ar[j], ar[j+1]) > 0) {
[ar[j], ar[j+1]] = [ar[j+1], ar[j]];
}
}
}
}
var ar = [24, 55, -2, 100, 0, 1, 7];
bubbleSort(ar, (a, b) => b - a);
console.log(ar);
Python 버블 정렬
오름차순 정렬입니다.
def bubbleSort(ar):
for i in range(len(ar) - 1, 0, -1):
for j in range(i):
if ar[j] > ar[j+1]:
ar[j], ar[j+1] = ar[j+1], ar[j]
ar = [24, 55, -2, 100, 0, 1, 7]
bubbleSort(ar)
print(ar)
Python 버블 정렬 - reverse 인수 사용
reverse 인수를 사용해서 내림차순으로 정렬했습니다.
def bubbleSort(ar, reverse=False):
for i in range(len(ar) - 1, 0, -1):
for j in range(i):
cond = (ar[j] < ar[j+1]) if reverse else (ar[j] > ar[j+1])
if cond:
ar[j], ar[j+1] = ar[j+1], ar[j]
ar = [24, 55, -2, 100, 0, 1, 7]
bubbleSort(ar, reverse=True)
print(ar)