[Sort] 버블 정렬

2024. 11. 27. 22:40·Algorithm&Data Structure

 

 

컴퓨터과학에서 데이터를 정렬하는 것은 매우 중요하다. 중요한 만큼 다양한 정렬 알고리즘이 존재하는데 차차 다 알아가 보자.

 


 

 

버블정렬

 

  버블 정렬(Bubble sort)은 배열을 순차적으로 비교하면서 정렬하는 알고리즘이다.

  1번째와 2번째 원소를 비교하고 정렬하고, 2번째와 3번째 비교 후 정렬 ...... n-1, n번째 비교 후 정렬이다.

 

  버블 정렬은 정렬 알고리즘 중 가장 최악의 성능을 보여주는 알고리즘이다.

 

  정렬에 대표적인 O(N^2)의 알고리즘이며

 

  O(n^2)은 1만 개 데이터를 1초에 정렬한다면 10만 개의 데이터는 100초 정도나 걸린다.

 

 

 


 

 

  버블 정렬은 성능이 최악이다. 보통 프로그래밍 처음 공부할 때 정렬을 처음 공부할 때 버블 정렬부터 공부를 한다. 가장 이해하기 쉽고 배우기 쉽고 코드가 짧다.

 

  입력량이 작으면 비효율적인 것을 느끼지 못하지만 정렬해야 할 데이터가 많아지면 버블정렬은 굉장히 비효율적이게 변한다.

 

  실제 프로그램 개발에서는 버블 쇼트는 안 사용한다고 한다.

 


 

 

  버블 쇼트는 단순하다. 중첩 반복문을 사용한다.

  해당 버블 정렬은 오름차순이다.

 

  외부 for문은 배열의 총길이 - 1 회만큼 돌린다.

  arr.length-1만큼 한 이유는 어차피 마지막 요소 이미 정렬된 값들이기 때문.

  

  내부 for문은 작성하고 싶은 대로 작성할 수 있지만

  

    void sort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 1; j < arr.length; j++) {
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

 

 

 

    static void bubble(int[] arr){
        for(int i=0; i<arr.length-1; i++){
            for(int j=i+1; j<arr.length; j++){
                if(arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

 

 

 

  어떤 식으로 작성하든 상관없다 목적은 오름차순, 내림차순 기준으로

  이중 반복문을 통해 구현하면 된다.

 

 

 

 

상세하게 코드를 짜봤다.

 

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr ={1,8,50,100,2};
        System.out.println("초기값");
        for(int i: arr){
            System.out.print(i+" ");
        }
        System.out.println();
        bubble(arr);
    }

    static void bubble(int[] arr){
        for(int i=0; i<arr.length-1; i++){
            System.out.println("버블정렬 "+(i+1)+"회차");
            for(int j=0; j< arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    swap(arr, j, j+1);
                }
            }

            for(int k:arr){
                System.out.print(k+" ");
            }
            System.out.println();
        }
    }

    static void swap(int[] arr, int index, int target){
        int temp = arr[index];
        arr[index] = arr[target];
        arr[target] = temp;
    }
}

 

 

 

 

 

 

 

버블 정렬 1회차 수행 과정

 

 

 

  외부 반복문 i가 1번 순환할 때 내부 for문은 이런 식으로 값 교환을 한다.

  한번 i가 돌면 맨 끝에 위치한 값은 배열에서 가장 큰 값이므로, 내부 for문은 arr.length-i-1만큼 돌면 된다.

 

  arr.length = 5이면,

  5-0-1 = 4,

  5-1-1 = 3.

  5-2-1 = 2

        .

        .

  5-n-1 = 길이

'Algorithm&Data Structure' 카테고리의 다른 글

하나의 배열을 공유하는 2개의 스택  (0) 2025.02.19
[Data Structure] Stack 구조  (4) 2025.01.30
[Algorithm] 이진 검색  (0) 2025.01.19
[Algorithm] 선형 검색  (0) 2024.12.29
[Algorithm] 기수 변환 프로그램  (0) 2024.11.19
'Algorithm&Data Structure' 카테고리의 다른 글
  • [Data Structure] Stack 구조
  • [Algorithm] 이진 검색
  • [Algorithm] 선형 검색
  • [Algorithm] 기수 변환 프로그램
oneH
oneH
  • oneH
    Hello WeonHyeok!
    oneH
  • 전체
    오늘
    어제
    • 분류 전체보기 (52) N
      • CSS (1)
      • Javascript (5)
        • JS자료구조,알고리즘 (1)
      • Java (14) N
        • OOP (9)
      • JSP (1)
      • Computer Network (2)
      • 이론 컴퓨터 (2)
      • Project (0)
      • Algorithm&Data Structure (12)
      • 데이터베이스 (3)
      • Spring,SpringBoot (1)
      • Git & GitHub (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MySQL
    JS
    컴퓨터네트워크
    object
    Selector
    덱
    링크드 리스트
    자바
    math
    컴파일
    선택자
    JavaScript
    combinators
    큐
    티스토리챌린지
    프로토콜
    OSI7계층
    Stack
    컴퓨터 네트워크
    선형 큐
    SQL
    Java
    오블완
    Git
    컴퓨터구조
    Algorithm
    OOP
    이진검색
    폰노이만 아키텍쳐
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
oneH
[Sort] 버블 정렬
상단으로

티스토리툴바