Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • docker
  • metastore
  • Coding
  • CS
  • algorithm
  • java
  • sort
  • 알고리즘
  • 빅데이터
  • Hive
  • hdfs
  • NiFi
  • 정렬
  • kafka
  • 프로그래밍
  • hadoop
  • C++
  • 코딩
  • spark
  • BigData

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[Algorithm] Sort #1 - 버블 정렬 Bubble Sort
Computer Science/Algorithm

[Algorithm] Sort #1 - 버블 정렬 Bubble Sort

2020. 12. 29. 22:01

버블 정렬이란?

 첫 번째 원소부터 인접한 두 원소를 검사하여 정렬하는 알고리즘

 

시간 복잡도

최상 : \( O(n^2) \)

최악 : \( O(n^2) \)

 

관련 글

[Algorithm] Sort #2 - 선택 정렬 Selection Sort

[Algorithm] Sort #3 - 삽입 정렬 Insertion Sort

[Algorithm] Sort #4 - 병합 정렬 Merge Sort

[Algorithm] Sort #5 - 힙 정렬 Heap Sort

[Algorithm] Sort #6 - 퀵 정렬 Quick Sort

 


 

 알고리즘의 기본이라고 할 수 있는 정렬에서 첫 번째는 버블 정렬입니다. 

 

알고리즘

 버블 정렬의 알고리즘은 다음과 같습니다.

  1. 현재 원소를 기준으로 다음 원소와 비교한 뒤 정렬한다.
  2. 1의 과정을 (1, 2)부터 차례대로 끝까지 진행한다.
  3. 1,2의 과정을 n-1번 진행한다.

 

버블 정렬 예시

{ 9, 1, 7, 5, 2} 순서대로 원소가 존재한다고 가정했을 때 버블 정렬의 예시는 다음과 같습니다.

 

 

 1회 정렬 시 앞에 있던 9가 가장 뒤로 정렬된 것처럼 원소 중 가장 큰 숫자가 뒤로 간 것을 확인할 수 있습니다.

 

 그리고 정렬함에 따라 숫자가 큰 순서대로 뒤에부터 정렬이 되기 때문에 불필요한 정렬 과정을 생략할 수 있습니다. 그 예시로 4회 정렬을 수행할 때 5,7,9의 숫자는 이미 정렬되었기 때문에 1과 2만 비교하고 끝나도 문제없습니다.

 

시간 복잡도 계산

 버블 정렬의 시간복잡도는 최악, 최상의 경우 모두 동일합니다.

 

 각 정렬 회차에 따라 n-1, n-2, n-3 ..... 2, 1번 비교하기 때문에 n(n-1)/2번이므로 시간 복잡도는 \( O(n^2) \)입니다. 

 

C++ Code

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> arr = {9,1,7,5,2};
    
    for(int i=0; i<arr.size(); i++)
        for(int j=0; j<arr.size()-i-1; j++)
            if(arr[j] > arr[j+1])
            	swap(arr[j], arr[j+1]);
    
    for(int i=0; i<arr.size(); i++)
        cout << arr[i];
}

'Computer Science > Algorithm' 카테고리의 다른 글

[Algorithm] Sort #6 - 퀵 정렬 Quick Sort  (0) 2021.01.16
[Algorithm] Sort #5 - 힙 정렬 Heap Sort  (0) 2021.01.09
[Algorithm] Sort #4 - 병합 정렬 Merge Sort  (0) 2021.01.08
[Algorithm] Sort #3 - 삽입 정렬 Insertion Sort  (1) 2021.01.04
[Algorithm] Sort #2 - 선택 정렬 Selection Sort  (0) 2021.01.02
    'Computer Science/Algorithm' 카테고리의 다른 글
    • [Algorithm] Sort #5 - 힙 정렬 Heap Sort
    • [Algorithm] Sort #4 - 병합 정렬 Merge Sort
    • [Algorithm] Sort #3 - 삽입 정렬 Insertion Sort
    • [Algorithm] Sort #2 - 선택 정렬 Selection Sort
    Taaewoo
    Taaewoo

    티스토리툴바