본문 바로가기

나 취준생/파이썬

버블 정렬

320x100
1
2
3
4
5
6
7
8
9
10
a=[5,4,3,2,1,8,7,10]
def bubble_sort(a):
    for i in range (len(a)-1):
        for j in range (len(a)-i-1): # 이미 정렬이 완료된 오른쪽은 제외
            if a[j]>a[j+1]:
                temp=a[j+1]
                a[j+1]=a[j]
                a[j]=temp
    return a
print(bubble_sort(a))





정렬이 가장 오래걸리는 경우는 제일 작은 수가 오른쪽 끝에 있을 때니까 ( 매 반복때마다 한칸씩 앞으로 옴 )

실험해보고 싶으신 분은 제일 작은 수 0을 끝자리에 추가해보면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
#a=[5,4,3,2,1,8,7,10]
a=[5,4,3,2,1,8,7,10,0]
def bubble_sort(a):
    for i in range (len(a)-1):
        for j in range (len(a)-i-1):
            if a[j]>a[j+1]:
                temp=a[j+1]
                a[j+1]=a[j]
                a[j]=temp
        print(a)
    return a
bubble_sort(a)




1
2
3
4
5
6
7
8
9
10
11
12
13
#a=[5,4,3,2,1,8,7,10]
#a=[5,4,3,2,1,8,7,10,0]
a=[1,2,3,4,5,6,7]
def bubble_sort(a):
    for i in range (len(a)-1):
        for j in range (len(a)-i-1):
            if a[j]>a[j+1]:
                temp=a[j+1]
                a[j+1]=a[j]
                a[j]=temp
        print(a)
    return a
bubble_sort(a)






근데 이 코드는 정렬이 빨리 끝난 상태여도 정해진대로 계속하는 문제가 있었다.
최적화된 코드를 만들어보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#a=[5,4,3,2,1,8,7,10]
a=[1,2,3,4,5,6,7]
def bubble_sort(a):
    for i in range (len(a)-1):
        cnt=0
        for j in range (len(a)-i-1):
            if a[j]>a[j+1]:
                temp=a[j+1]
                a[j+1]=a[j]
                a[j]=temp
                cnt+=1
        #print(a)
        if cnt==0:
            break
    return a
print(bubble_sort(a))








반응형

'나 취준생 > 파이썬' 카테고리의 다른 글

재귀함수  (0) 2020.12.23
탐욕 알고리즘  (0) 2020.12.23
이진 탐색  (0) 2020.12.22
합성곱 연산 알고리즘  (0) 2020.12.22
폐 사진 이미지를 숫자로 변환  (0) 2020.12.22