def sel_sort(a): #선택정렬
n = len(a)
for i in range(0, n - 1):
min_idx = i
for j in range(i + 1, n):
if a[j] < a[min_idx]:
min_idx = j
a[i], a[min_idx] = a[min_idx], a[i]
# print(a) # 정렬 과정 출력하기
d = [2, 1, 5, 4, 3]
sel_sort(d)
print(d)
#select sort
for i in range(0, len(n)-1): #i: 정렬할 위치
min=i #min: 최소값의 위치. 초기값으로 i값 할당
for j in range(i+1, len(n)): #j: 최소값을 찾기 위해 한칸씩 위치 이동할 인덱스로 사용
if n[min] > n[j]: #min 위치의 값, 즉 최소값보다 더 작은 값을 만나면(j번째 방에서)
min = j #최소값의 위치를 j로 변경. 이 동작을 j가 리스트 끝까지 도달할때까지 반복
if min != i: #60번줄에서 min에 i 값을 할당했기 때문에 min이 이동하지 않았다면 i에 최소값이 있는 경우
tmp = n[min] #위 경우에는 자리 바꿀 필요없음
n[min] = n[i] #그런데 min과 i가 같지 않다면 min이 최소값 있는 위치로 이동한 것이고 그 최소값이 i위치의
n[i] = tmp #값으로 들어가야 함. 그러므로 min과 i가 같지 않으면 두 위치의 값을 swap
def ins_sort2(arr): #삽입정렬
for end in range(1, len(arr)):
i = end
while i > 0 and arr[i - 1] > arr[i]:
arr[i], arr[i - 1] = arr[i - 1], arr[i]
i -= 1
d = [2, 1, 5, 4, 3]
ins_sort2(d)
print(d)
#insert sort
for i in range(1, len(n)): #i:자기 자리 찾을 값의 위치
tmp=n[i] #i위치의 값이 지워지지 않게 tmp 옮겨놓음
j=i-1 #j: i의 앞 위치로 i값의 위치를 찾기위해 비교할 대상의 위치
while j>=0 and n[j]>tmp:
n[j+1]=n[j] #j위치의 값을 뒤로 한칸 이동
j-=1 #j를 한칸 앞으로 이동
j+=1
n[j]=tmp
def bubble_sort(n): #거품정렬(bubble sort)
for i in range(0, len(n)-1):
for j in range(0, len(n)-1-i):
if n[j]>n[j+1]:
tmp = n[j]
n[j] = n[j+1]
n[j+1] =tmp
n = [8, 3, 6, 10, 9, 1, 7, 2, 4, 5]
print(n)
bubble_sort(n)
print(n)
'알고리즘' 카테고리의 다른 글
1이 될때까지. (0) | 2022.07.02 |
---|---|
DFS / BFS (0) | 2022.06.29 |
피보나치 수열 구하기-파이썬 (0) | 2020.12.13 |
팩토리얼 구하기-파이썬 (0) | 2020.12.13 |
이진 탐색(search) 알고리즘 정리-파이썬 (0) | 2020.12.13 |