• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[026] Algorithm(정렬1_버블 정렬 bubble sort)

09 Feb 2020

Reading time ~2 minutes

Table of Contents
  • 목차
  • 정렬이란?
  • 버블정렬
    • 수도코드
      • 코드 설명
    • 시간 복잡도
    • 평가
    • 구현
      • 파이썬
      • 자바
      • 내가 짜본 코드

목차

  • 정렬이란?
  • 버블정렬
    • 수도코드
      • 코드 설명
    • 시간 복잡도
    • 평가
    • 구현
      • 파이썬
      • 자바

정렬이란?

  • 임의로 나열되어 있는 데이터들을 주어진 항목에 따라 크기 순서대로 작은 순서부터 (오름차순) 또는 큰 순서부터 (내림차순) 늘어놓은 것임
  • 정렬되어 있는 데이터들은 다음과 같은 작업을 수행할 때 응용
    ① 데이터를 탐색할 때
    ② 리스트에 있는 다른 항목들을 비교할 때

버블정렬

인접한 2개의 레코드를 비교하여 순서대로 되어 있지 않으면 서로 교환
11111


수도코드

Bubblesort(A) 
   for i from 1 to A.length 
      for j from 0 to A.length - 1
          if A[j] > A[j + 1] 
              swap a[j] with a[j + 1]

코드 설명

  • 이 알고리즘은 n번의 라운드로 이뤄져 있음
    • 각 라운드마다 배열의 아이템을 한 번씩 쭉 모두 살펴본다.
      • 연달아 있는 아이템 2개의 순서가 잘못되어 있는 것을 발견하면, 두 아이템을 맞바꾼다.

① 이웃한 두 개의 원소를 비교하여 순서가 서로 다르면 원소의 자리를 서로 바꿈
② 첫번째 원소와 두번째 원소를, 두번째 원소와 세번째 원소를, 이런식으로 (n-1)번째 원소와 마지막 원소와 비교하여 가장 큰 수를 맨 뒤로 이동
③ 다시 처음부터 (n-1) 까지 비교하여 두번째로 큰 수를 위치에 이동
④ 반복 실행

image


시간 복잡도

배열 전체를쭉 살펴보는 것을 n번

  • for문이 2번
    시간 복잡도는 항상 O(\(n^2\))
    image image

평가

  • 이보다 더 비효율적일 수는 없음
  • 구현 가능한 가장 느린 정렬 알고리즘

구현

파이썬

def bubblesort(A):
  for i in range(1, len(A)):
    for j in range(0,len(A)-1):
        if A[j] > A[j + 1]:
            A[j], A[j + 1] = A[j + 1], A[j]

123

자바

public class BubbleSort {
	public static void main(String[] args) {
	int [] A = {3,44,38,5,47,15,36,26};
	int temp = 0;
	for(int i = 1 ; i< A.length; i++ ) {
		for(int j = 0 ; j< A.length-1; j++ ) {
			// 크면 바꾸는 함수입니다
      if(A[j]>A[j+1]) {
				temp = A[j+1];
				A[j+1] = A[j];
				A[j] = temp;
						
			}
		}
	// 정렬된 A를 읽어 출력해주는 함수입니다
  for(int k = 0; k<A.length-1; k++) {
		System.out.println(A[k]);
	}
	}
	}
}

내가 짜본 코드

난 point로 기준을 잡아 while으로 전체를 크게 돌리고
그리고 while문이 실행될 때 마자 각자 돌라가는 코드를 이렇게 표현해 봤다

a = [2,8,4,5,9]
point = 0
while point <= len(a)-1:
    for i in range(point,len(a)-1):
        if a[i] > a[i+1]:
            a[i], a[i+1] = a[i+1], a[i]
    point +=1

[결과값]

print(a)
# [2, 4, 5, 8, 9]

헷 잘 나오는 것 같다



Coding test Share Tweet +1