Algorithm
[알고리즘] bubble_sort 버블정렬(pseudo-code, 파이썬, Java)
ID_DI
2021. 10. 15. 00:19
버블정렬
매 단계마다 처음부터 마지막까지 차례대로 인접한 두 원소를 비교하여 뒤에 있는 원소가 앞의 원소보다 작은 경우 두 원소를 교환
각 단계 수행 후 최대값이 마지막으로 이동하므로, 마지막 원소는 정렬대상에서 제외
Pseudo-code
Algorithm bubbleSort(a, n)
for i = n – 1 downto 1
for j = 0 to i-1
if(a[j] > a[j+1]) then
int temp = a[index]
a[index] = a[i]
a[i] = temp
Python
def bubble_sort(arr):
for i in range(len(arr)-1,0,-1):
for j in range(i):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
Java
public class Bubble{
public void sort(int[] arr){
for(int i = arr.length -1; i > 0; i--){
for(int j = 0; j <= i; j++){
if(arr[j] < arr[j+1]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
개선된 버블정렬
앞 뒤 자리의 비교가 일어나지 않았다면, 정렬되지 않는 값이 하나도 없었다고 간주할 수 있으므로, 정렬을 종료한다.(최적화)
Pseudo-code
Algorithm bubbleSort(a, n)
for i = n – 1 downto 1
sorted = true //flag 생성
for j = 0 to i-1
if(a[j] > a[j+1]) then
temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
sorted = false
if (sorted)
return
Python
def bubble_sort(arr):
for i in range(len(arr) - 1, 0, -1):
sorted = True
for j in range(i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
sorted = False
if sorted:
break
Java
public class Bubble{
public void sort(int[] arr){
for(int i = arr.length -1; i > 0; i--){
boolean sorted = true;
for(int j = 0; j <= i; j++){
if(arr[j] < arr[j+1]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
sorted = false;
}
}
if(sorted){
break;
}
}
}
}
수행시간분석
최악의 경우 (역순으로 정렬)
- W(n) = O(n^2)
최선의 경우 (이미 정렬)
- B(n) = O(n)