[알고리즘] 버블 정렬 (Python)

2023. 2. 6. 02:32·Algorithm
반응형

Do it! 알고리즘 코딩테스트: 파이썬 편과 자료구조 과목 학습 후 정리한 포스팅 입니다.

 

 

이번 포스팅에서는 버블 정렬에 대해 학습합니다.

 

I) 버블 정렬 이론

버블 정렬은 데이터의 인접 요소끼리 비교하고, swap 연산을 수행하며 정렬하는 방식이다.시간 복잡도는 O(n^2)으로 다른 정렬 알고리즘보다 느리다

 

loop를 돌면서 인접한 데이터 간의 swap 연산으로 정렬한다. -> loop를 1번 돌 때 1개의 위치가 결정된다.특정 loop 전체에서 swap이 1번도 발생하지 않았다면 데이터가 모두 정렬되었다는 뜻으로 프로세스를 종료해도 된다.

 

 

예를들어 보자면

크기가 4인 배열이 다음과 있다고 하자

1회차: 가장 큰 수 10이 정렬된다.

정렬횟수 3회

 

2회차: 두번째 큰 수 6이 정렬된다.

정렬횟수 2회

 

3회차: 세번째 큰 수 4가 정렬된다.

정렬횟수 1회

 

시간 복잡도를 위해 정렬횟수를 모두 합하면 1부터 n-1까지의 합임을 알 수 있다.

따라서 시간 복잡도는 O(n^2)이다. ( n(n-1) / 2 )

 

 

 

 

II) 버블 정렬 구현

이론을 바탕으로 버블 정렬을 구현해보면 다음 코드와 같다.

n = int(input()) # 수의 개수
arr = []

for i in range(n):
    arr.append(int(input()))   # int로 형 변환 후 list에 넣어주자!!!!!!!!!!!!!!!!!!!!!

# 배열의 크기 만큼 반복
for i in range(len(arr)):
    # 배열의 크기에서 i 값과 1을 뺀 만큼 반복 
    for j in range(len(arr)-i-1):
        if arr[j] > arr[j+1]: # 앞에 있는 값이 더 크면 바꾼다.
            swap = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = swap
            
# 정답 출력하는 부분            
for i in range(len(arr)):
    print(arr[i])    
    
    

# sort 함수 이용한 풀이 
n = int(input()) # 수의 개수
arr = []

for i in range(n):
    arr.append(int(input()))   # int로 형 변환 후 list에 넣어주자!!!!!!!!!!!!!!!!!!!!!
arr.sort()
for i in range(len(arr)):
    print(arr[i])

위의 코드는 백준 2750번 문제와도 동일하다.

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

직접 구현 할 수도 있고 파이썬의 내장 함수인 sort()나 sorted()를 통해서도 구할 수 있다.

sort(), sorted()에 자세한 설명이 궁금하다면 아래의 포스팅으로 ~~~

https://uoa6uoas.tistory.com/entry/파이썬-정렬-함수-sort-VS-sorted

 

[파이썬] 정렬 함수 (sort VS sorted)

파이썬 문법학습 후 정리한 포스팅 입니다. 이번 포스팅에서는 파이썬 정렬 함수에 대해 학습합니다. I) sort 함수 - 리스트.sort() 형식 - 리스트형의 메소드 (리스트의 원본값 수정) II) sorted 함수 -

uoa6uoas.tistory.com

 

 

 

 

 

<Summary>

- 버블 정렬  

 

*유의사항

- 알고리즘을 공부 중인 인공지능공학과 학부생이 공부하여 남긴 정리입니다.

- 정확하지 않거나, 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Algorithm' 카테고리의 다른 글

[백준 1459번] 걷기 (Python)  (0) 2023.01.24
[백준 11501번] 주식 (Python)  (7) 2023.01.23
[백준 11659번] 구간 합 구하기 (Python)  (0) 2022.12.30
[백준 1546번] 평균 구하기 (Python)  (7) 2022.12.29
[백준 11720번] 숫자의 합 구하기 (Python)  (1) 2022.12.29
'Algorithm' 카테고리의 다른 글
  • [백준 1459번] 걷기 (Python)
  • [백준 11501번] 주식 (Python)
  • [백준 11659번] 구간 합 구하기 (Python)
  • [백준 1546번] 평균 구하기 (Python)
성 언
성 언
AI 학과 3학년 학생이자 RAG 기반 LLM 챗봇 개발 회사에서 근무 중입니다. AI 챗봇 개발과 관련된 기술, 연구, 그리고 실험 과정에서 얻은 인사이트를 공유합니다. 최신 AI 기술을 함께 탐구하며 성장해 나가요!
    반응형
  • 성 언
    AI EON
    성 언
  • 전체
    오늘
    어제
    • AII
      • NLP
      • AI Paper Review
      • MLOps
      • Python
      • Algorithm
      • Memo
      • Server Developer
        • Node.js
        • DataBase&Data Engineering
        • Server Basic
      • MATH
        • Linear Algebra
        • AI
      • etc
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리랭커
    스택
    배열의 모양 변경
    Ubuntu-20.04 APM 소스 설치
    map 함수
    node.js
    reranker
    패스트캠퍼스 수강 후기
    Python
    word 자동화
    Signature 초격차 패키지
    알고리즘
    팬텀 읽기
    다중 버전 동시성 제어
    파이썬
    그리디 알고리즘
    docx-template
    umc
    배타 잠금
    transaction
    더티 쓰기
    더티 읽기
    비반복 읽기
    NVML
    트랜잭션
    파이썬 문서 자동화
    [Numpy] squeeze & unsqueeze
    백준
    문서 자동화
    c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
성 언
[알고리즘] 버블 정렬 (Python)
상단으로

티스토리툴바