Bubble Sort

2023. 4. 13. 21:10·📚 Data Architect/Algorithm

💡 버블 정렬 (Bubble Sort)

데이터의 인접 요소의 크기를 비교하고, swap 연산을 수행하며 정렬하는 방식

시간복잡도는 O(n2)으로 굉장히 느린편이다.

보통 loop를 돌면서 인접한 데이터 간의 swap 연산으로 정렬한다.


과정

  1. 비교 연산이 필요한 경우 loop 범위를 설정한다.
  2. 인접한 데이터 값을 비교한다.
  3. swap 조건에 부합하면 swap 연산을 수행한다.
  4. loop가 끝날때까지 2~3을 반복한다
  5. 정렬 영역을 설정한다, 다음 loop를 실행할 때는 이 영역을 제외한다.
  6. 비교 대상이 없을 때까지 1~5를 반복한다.

만약 특정 loop의 전체 영역에서 swap이 발생하지 않으면, 정렬이 됬다는 의미이므로 프로세스를 종료해도 된다.


버블정렬을 이용한 N개의 수 오름차순 정렬

sort()를 이용하면 간단하지만, 예시를 위해 정렬을 직접 구현한다.

public class BubbleSort {

    static int testA = 5;
    static int[] testB = {5, 2, 3, 4, 1};

    public static void main(String[] args) {
        bubbleSort(testA, testB);
    }

    public static int bubbleSort(int a, int[] b) {
        // 정렬할 배열 생성
        int[] A = new int[a];

        // 정렬할 배열에 파라미터로 넘어온 정렬되지 않은 숫자를 담는다
        for (int i=0; i<a; i++) {
            A[i] = b[i];
        }

        for (int i=0; i<a-1; i++) {
            for (int j=0; j<a-1-i; j++) {
                if (A[j] > A[j+1]) {
                    // 현재 A 배열의 값보다 1칸 오른쪽 배열의 값이 더 작으면 두 수를 바꾼다.
                    int temp = A[j];
                    A[j] = A[j+1];
                    A[j+1] = temp;
                }
            }
        }

        // 값 출력
        int answer = 0;
        for (int i=0; i<a; i++) {
            answer = A[i];
            System.out.println(answer);
        }
        re
저작자표시 (새창열림)

'📚 Data Architect > Algorithm' 카테고리의 다른 글

Quick Sort  (0) 2023.04.14
Insertion Sort  (0) 2023.04.14
Selection Sort  (0) 2023.04.14
DFS & BFS 구현  (0) 2023.04.13
Stack & Queue 구현  (0) 2023.04.13
'📚 Data Architect/Algorithm' 카테고리의 다른 글
  • Insertion Sort
  • Selection Sort
  • DFS & BFS 구현
  • Stack & Queue 구현
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Bubble Sort
    상단으로

    티스토리툴바