뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (200)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (25)
      • Spring (16)
      • 데이터베이스 (6)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

Algorithm & Data Structure/개념

버블 정렬

2021. 8. 15. 15:37
반응형

앞에서부터 2개씩 크기를 비교하여 정렬하는 "버블" 정렬

 

 

패턴 파악

데이터 2개 (턴 한번, 비교 1번)

1. 턴 한번

5 2
2 5

 

데이터 3개  (턴 두번, 비교 2번)

1. 턴 한번

5 4 2
4 5 2

2. 턴 두번

4 2 5
2 4 5

 

데이터 4개까지 해보면 패턴이 보일 것이다.

1. 한 턴에서 비교 횟수 : [데이터 길이 -1]번 진행

2. 턴 횟수 : [데이터 길이 -1]번 진행

3. 한 턴이 마무리되면 가장 큰 값은 맨 뒤에 위치하게 된다. -> 매 턴마다 비교 횟수를 줄여도 된다.

 

 

psudo 코드

for index in 데이터 길이 -1 만큼 반복:

  for 데이터 길이 -1 -index 만큼 조건 체크:

      if 앞데이터 > 뒤데이터:

         swap(앞, 뒤)

 

* 스왑이 일어났는지 체크해서, 이미 정렬된 배열이라 스왑이 일어나지 않았다면 break하는 것이 효율적이다.

방법 1) swap = 0 으로  매 턴마다 초기화. swap 시에 +1 해준 후, 0인지 체크

방법 2) swap= False로 매 턴마다 초기화. swap 시에 true 해준 후, false인지 체크

(위 psudo에는 포함되지 않은 로직이다.)

 

 

파이썬 코드

def bubblesort(data):
    for index in range(len(data) - 1):
        swap = False
        for index2 in range(len(data) - index - 1):
            if data[index2] > data[index2 + 1]:
                data[index2], data[index2 + 1] = data[index2 + 1], data[index2]
                swap = True
        
        if swap == False:
            break
    return data
import random

data_list = random.sample(range(100), 50)
print (bubblesort(data_list))

 

 

시간 복잡도

반복문이 2개인데, N만큼 반복하기 때문에, O(N^2).

 

만약 완전 정렬이 되어있는 최선의 경우는 한개의 for문만 돌기 때문에 O(N) 이 된다.

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

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

삽입 정렬  (0) 2021.08.15
선택 정렬  (0) 2021.08.15
[Concept] 해쉬 테이블 (Hash Table)  (0) 2021.08.10
[Concept] 시간 복잡도  (0) 2021.08.05
[Concept] 더블 링크드 리스트 (double linked list)  (0) 2021.08.04
    'Algorithm & Data Structure/개념' 카테고리의 다른 글
    • 삽입 정렬
    • 선택 정렬
    • [Concept] 해쉬 테이블 (Hash Table)
    • [Concept] 시간 복잡도
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바