알이즈웰

[Algorithm] 버블정렬 본문

Study/STUDY

[Algorithm] 버블정렬

2021. 4. 17. 10:31

두 인접한 원소를 검사하여 정렬하는 방법
시간복잡도가 느린편이지만 코드가 단순해서 자주 사용된다.

(구현하기는 간단하지만 비효율적인 알고리즘)

 

버블정렬 (java)

public class BubbleTest {
	public static void main(String[] args) {
		int[] a = {254,3,213,64,75,56,4,324,65,78,9,5,76,3410,8,342,76};
		int b;
		for(int i = 0 ; i < a.length ; i ++) {
			for(int j = 0 ; j < a.length -i -1 ; j ++) {
				if(a[j]>a[j+1]) {
					b = a[j];
					a[j] = a[j+1];
					a[j+1] = b;
				}
			}
		}
		
		for(int i = 0 ; i < a.length ; i ++) {
			System.out.println(a[i]);
		}
	}
}

출처 : [Algorithm]버블정렬 예제(bubble sort)

 

버블 정렬은 한번의 순회를 마칠 때 마다 비교 대상이 하나씩 줄어들기 때문에, 
(->  why? 한 회전이 끝나면 배열안에서 가장 큰 값이 맨 뒤로 가기 때문.)

전체 원소의 개수가 n개 라고 할 때, 총 n-1 번 순회하면 정렬이 끝난다.

 

총 원소 개수가 5개라면 4 + 3 + 2 + 1 = 10번 비교하게 된다.

(-> 총 (n-1) + (n-2) + ... + 2 + 1 번의 비교연산 발생. for문을 각각 n번과 n-1번 돌림)

 

 

시간복잡도는 (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2, 즉 O(n2)

등차수열의 합

(참고) O(n2)정렬 알고리즘엔 선택정렬, 삽입정렬, 버블정렬이 있다

 

 

최악의 경우 O(n^2)

최선의 경우 O(n) 의 시간복잡도를 갖게된다.

 

빅오 표기법

알고리즘 시간 복잡도 표기법 3가지 표기법최상의 경우 : 오메가 표기법 (Big-Ω Notation)최악의 경우 : 빅오 표기법 (Big-O Notation)평균의 경우 : 세타 표기법 (Big-θ Notation)
가장 보편적으로 사용되는 것은 Big-O 표기법입니다. Big-O 표기법은 계수와 낮은 차수의 항을 제외시키는 방법입니다(ex: 2n²-2n+2 > O(n2)로 표기). 이런 방식으로 표현할 때, (예를 들면, 입력 크기를 무한대로 입력하여) 시간복잡도를 점근적으로 묘사한다고 말한다.
(출처 : [Algorithm] 알고리즘을 위한 시간복잡도 계산 방법 - Big-O 표기)

 

 

참고한 블로그

[JAVA] 버블정렬(Bubble Sort) 알고리즘
 

[JAVA] 버블정렬(Bubble Sort) 알고리즘

버블정렬(Bubble Sort) 버블정렬은 인접한 두개의 원소를 비교하여 가장 큰 원소가 마지막자리로 오게해서 숫자를 정렬하는 방법입니다. 원소를 두개씩 교환하면서 마지막원소까지 오는 모습이 거

cornswrold.tistory.com

 

버블정렬 버블소트 BubleSort 자바구현
 

버블정렬 버블소트 BubleSort 자바구현

버블정렬 버블소트 BubleSort 자바구현 JAVA 로 구현한 버블정렬 소스 배열을 순차탐색하여 i, i+1번째 요소를 비교하여 큰 것을 뒤로 이동 위 과정이 1번 처리되는 경우 가장 큰 수가 배열 마지막에

javaplant.tistory.com

 

정렬 알고리즘 정리1 ( 개념 / 시간복잡도 - O(n^2) )
 

정렬 알고리즘 정리1 ( 개념 / 시간복잡도 - O(n^2) )

안녕하세요! 오늘은 정렬 알고리즘에 대해 공부하려고 해요. 정렬 알고리즘은 공부를 안하면 늘 까먹는 것 같아요.. 퀵정렬이 어떻게 이뤄지는지....선택정렬이 뭐였는지.. 또 시간복잡도는 뭔

zeddios.tistory.com

 

 

'Study > STUDY' 카테고리의 다른 글

오랜만에 공부  (0) 2020.03.28
파이썬[Python]  (0) 2018.02.02
Git  (0) 2017.09.22
오프라인/온라인 교육기관  (0) 2017.05.17
코드 분석 도구  (0) 2017.05.11
Comments