파이썬 초보자가 버블 정렬을 정리
이것은 비망록입니다.
잊지 않을 것 같지만
(추기 2020/0611:13:00)
@shiracamus 님으로부터 어드바이스를 받았으므로 수정합니다.
버블 정렬
버블 소트란, 기본교환법이라고도 불리는 소트 알고리즘으로, 대략 적당하게 만들려고 하면 이것이 된다
내용의 해설
bubble.py'''1'''def bubble(T):
'''2''' i = len(T)-1
'''3''' while i:
'''4''' for j in range(i-1):
'''5''' if T[j] > T[i]:
'''6''' T[j],T[i] = T[i],T[j]
'''7''' i -= 1
'''8''' return T
와우, 아주 짧은 알고리즘입니다.
라고 쓴 쪽도 조금 깜짝.
이만큼 짧기 때문에 줄 번호 넣어 해설해 본다.
bubble.py
'''1'''def bubble(T):
'''2''' i = len(T)-1
'''3''' while i:
'''4''' for j in range(i-1):
'''5''' if T[j] > T[i]:
'''6''' T[j],T[i] = T[i],T[j]
'''7''' i -= 1
'''8''' return T
와우, 아주 짧은 알고리즘입니다.
라고 쓴 쪽도 조금 깜짝.
이만큼 짧기 때문에 줄 번호 넣어 해설해 본다.
주의점
len(T)
로 돌아오는 숫자는 「길이」이므로, 배열 번호에 그대로 삽입하면 배열외를 참조하는 에러가 된다. while
문장에는 if
와 같이 true
가 되는 문자가 넣으면 좋기 때문에 i!=0
와 같은 의미가 된다 i
단체를 넣어 보았다.for
하지만 아무래도 사용하고 싶다면 1행째를 지워 for i in range(len(T)-1,0,-1):
라고 쓰면 된다. for
에서. range(i)
하지만 괜찮지만 루프가 한 번 낭비됩니다.false
야로 거품 정렬은 사실 무겁다.
Wiki
또, 일일이 모두를 스왑 하는 것도 무거워지는 원인이므로, 개선 알고리즘에서는 데이터를 퇴피시키거나 하는 형태로 하기도 합니다.
bubble2.pydef bubble2(T):
for i in range(len(T)-1,0,-1):
tmp = T[0]
for j in range(1,i+1):
if tmp < T[j]:
tmp , T[j] = T[j], tmp
T[j-1]=T[j]
T[i] = tmp
print(T)
return T
일단 그 자리의 김으로 만들어 보았지만 이것도 아직 개선점 있나? 있어야합니다.
여담
무작위로 숫자의 중복이 없는 배열을 작성하는 프로그램을 짜었으므로 예시해 둡니다.
(수정 부분)
기본 인수에 목록을 사용하지 마십시오.
참고 : htps : // / cs. py 응. 오 rg/쟈/3/후아q/p로g 라민 g. html #why - 어서 - lt - ゔ ぅ 에 s - 멋쟁이 d
xMake(i , T=[-1])로 하고 있던 부분과 그에 의한 프로그램의 본문을 수정하였습니다.
makeLis.pyimport random as r
def xMake(i,T = None ):
if T is None:
T = [r.randint(1,i)]*i
return xMake( 1 , T )
if i == len(T):
return T
T[i] = r.randint(1,len(T))
for j in range(i):
if T[i] == T[j]:
return xMake( i , T )
return xMake( i+1 , T )
print(xMake(10))
>>[2, 1, 3, 6, 4, 10, 9, 5, 7, 8]
print(xMake(20))
>>[13, 20, 1, 12, 7, 8, 6, 4, 17, 11, 14, 9, 18, 3, 5, 10, 15, 2, 19, 16]
의지에서도 재기 함수를 사용하는 사람 더 좋은 쓰는 방법이나 깔끔한 쓰는 방법이 있으면 가르쳐 주세요.
@shiracamus 씨로부터 가르쳐 주셨습니다.
range와 sample을 사용하면 깔끔하게 쓸 수 있습니다.
By_shiracamus.pyimport random as r
def xMake(i):
return r.sample(range(1, i + 1), k=i)
print(xMake(10))
print(xMake(20))
random.sample
를 사용하면 이렇게도 편해지는군요…
감사합니다! 참고하겠습니다!
함수를 선언할 때 자신은 x〇〇()
라고 이름을 붙이는 경우가 많습니다(대개 번호).
목적 없이 프로그램을 쓰거나 복사하여 쓰는 법을 바꾸거나 하는 것과 함수명에 법칙이 없으면 프로그램할 때 써 잘못하거나 하기 때문에.
그리고, 실제로 사용하게 되었을 때에 텍스트 에디터의 치환 기능으로 재기록해 아는 이름으로 한다, 라고 하는 것을 합니다.
이것이 좋은 것인지는 모릅니다만, 원래 영어가 서투르기 때문에 철자 실수를 하는 등의 부끄러운 것을 때때로 하기 때문에.
Reference
이 문제에 관하여(파이썬 초보자가 버블 정렬을 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sola_wing529/items/a091a4db860779b5c032
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def bubble2(T):
for i in range(len(T)-1,0,-1):
tmp = T[0]
for j in range(1,i+1):
if tmp < T[j]:
tmp , T[j] = T[j], tmp
T[j-1]=T[j]
T[i] = tmp
print(T)
return T
무작위로 숫자의 중복이 없는 배열을 작성하는 프로그램을 짜었으므로 예시해 둡니다.
(수정 부분)
기본 인수에 목록을 사용하지 마십시오.
참고 : htps : // / cs. py 응. 오 rg/쟈/3/후아q/p로g 라민 g. html #why - 어서 - lt - ゔ ぅ 에 s - 멋쟁이 d
xMake(i , T=[-1])로 하고 있던 부분과 그에 의한 프로그램의 본문을 수정하였습니다.
makeLis.py
import random as r
def xMake(i,T = None ):
if T is None:
T = [r.randint(1,i)]*i
return xMake( 1 , T )
if i == len(T):
return T
T[i] = r.randint(1,len(T))
for j in range(i):
if T[i] == T[j]:
return xMake( i , T )
return xMake( i+1 , T )
print(xMake(10))
>>[2, 1, 3, 6, 4, 10, 9, 5, 7, 8]
print(xMake(20))
>>[13, 20, 1, 12, 7, 8, 6, 4, 17, 11, 14, 9, 18, 3, 5, 10, 15, 2, 19, 16]
의지에서도 재기 함수를 사용하는 사람 더 좋은 쓰는 방법이나 깔끔한 쓰는 방법이 있으면 가르쳐 주세요.
@shiracamus 씨로부터 가르쳐 주셨습니다.
range와 sample을 사용하면 깔끔하게 쓸 수 있습니다.
By_shiracamus.py
import random as r
def xMake(i):
return r.sample(range(1, i + 1), k=i)
print(xMake(10))
print(xMake(20))
random.sample
를 사용하면 이렇게도 편해지는군요…감사합니다! 참고하겠습니다!
함수를 선언할 때 자신은
x〇〇()
라고 이름을 붙이는 경우가 많습니다(대개 번호).목적 없이 프로그램을 쓰거나 복사하여 쓰는 법을 바꾸거나 하는 것과 함수명에 법칙이 없으면 프로그램할 때 써 잘못하거나 하기 때문에.
그리고, 실제로 사용하게 되었을 때에 텍스트 에디터의 치환 기능으로 재기록해 아는 이름으로 한다, 라고 하는 것을 합니다.
이것이 좋은 것인지는 모릅니다만, 원래 영어가 서투르기 때문에 철자 실수를 하는 등의 부끄러운 것을 때때로 하기 때문에.
Reference
이 문제에 관하여(파이썬 초보자가 버블 정렬을 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sola_wing529/items/a091a4db860779b5c032텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)