• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [알고리즘] 버블정렬 (Bubble sort)
        2024년 11월 22일
        • 학페
        • 작성자
        • 2024.11.22.:48

        버블 정렬이란?

        버블 정렬은 배열의 요소들을 인접한 두 개씩 비교하며 정렬합니다. 두 요소를 비교하여 필요하다면 위치를 바꾸고, 이러한 과정을 배열의 끝까지 반복하면서 가장 큰 값(또는 작은 값)이 점차 배열의 끝으로 "떠오르는" 방식입니다.

        간단한 동작 원리:

        1. 배열의 첫 번째 요소부터 시작해 인접한 두 요소를 비교합니다.
        2. 두 요소가 잘못된 순서라면(예: 오름차순 정렬에서 앞의 값이 뒤의 값보다 클 경우) 위치를 교환(swap) 합니다.
        3. 배열 끝까지 이 과정을 반복하며, 가장 큰 값이 맨 끝에 위치합니다.
        4. 위 과정을 배열의 길이가 점차 줄어들도록 반복하면 정렬이 완료됩니다.

        버블 정렬의 동작 과정

        배열 [64, 25, 12, 22, 11]을 버블 정렬로 오름차순 정렬하는 과정을 보겠습니다.

        1. 첫 번째 반복(배열 전체 탐색)
          • 64와 25 비교 → 교환 → [25, 64, 12, 22, 11]
          • 64와 12 비교 → 교환 → [25, 12, 64, 22, 11]
          • 64와 22 비교 → 교환 → [25, 12, 22, 64, 11]
          • 64와 11 비교 → 교환 → [25, 12, 22, 11, 64]
          • 배열 끝에 가장 큰 값 64가 위치합니다.
        2. 두 번째 반복(마지막 요소 제외)
          • 25와 12 비교 → 교환 → [12, 25, 22, 11, 64]
          • 25와 22 비교 → 교환 → [12, 22, 25, 11, 64]
          • 25와 11 비교 → 교환 → [12, 22, 11, 25, 64]
          • 배열 끝에서 두 번째 위치에 25가 자리 잡습니다.
        3. 세 번째 반복(마지막 두 요소 제외)
          • 12와 22 비교 → 그대로 유지
          • 22와 11 비교 → 교환 → [12, 11, 22, 25, 64]
          • 배열 끝에서 세 번째 위치에 22가 자리 잡습니다.
        4. 네 번째 반복(마지막 세 요소 제외)
          • 12와 11 비교 → 교환 → [11, 12, 22, 25, 64]
          • 배열이 완전히 정렬되었습니다.

        버블 정렬의 코드 구현

        C++로 구현한 버블 정렬 코드는 다음과 같습니다.

        #include <iostream>
        #include <stack>
        #include <string>
        #include <unordered_map>
        #include <vector>
        #include <algorithm>
        using namespace std;
        
        //배열 인덱스를 역으로 설정하여 구현하는 방법도 존재합니다.
        //저는 정방향으로 구현해봤습니다.
        void bubble_sort(int ary[], int size) {
        	//총 반복 횟수만큼 반복
        	for (int i = 0; i < size - 1; i++) {
        		// 실질적으로 값 변경하는 반복문
        		// 배열의 우측부터 점차 정렬되어지므로 반복횟수가 점차 줄어듭니다.
        		// 이를 i를 빼어줌으로써 구현하였습니다.
        		for (int j = 0; j < size - 1 - i; j++) {
        			//현재 값과 다음 값 비교
        			if (ary[j] > ary[j + 1]) {
        				int temp = ary[j];
        				ary[j] = ary[j + 1];
        				ary[j + 1] = temp;
        			}
        		}
        	}
        }
        
        int main() {
        	ios_base::sync_with_stdio(false);
        	cin.tie(NULL);
        	int ary[5] = {64, 25, 12, 22, 11};
        	bubble_sort(ary, 5);
        	for (int i = 0; i < 5; i++)
        		cout << ary[i] << ' ';
        
        	return 0;
        }

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

        [알고리즘] 합병정렬 (Merge Sort) (BOJ 2752, C++)  (0) 2024.12.13
        [정리] 포인터를 사용하는 이유에 대한 개인적인 생각(백준 1920, C++)  (0) 2024.11.23
        [알고리즘] 삽입정렬 (insertion sort)  (0) 2024.11.21
        [알고리즘] 선택정렬 (selection sort)  (0) 2024.11.20
        그래프 탐색 - DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)  (0) 2022.09.04
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바