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 |