n = [9, 2, 4, 1, 10, 8, 6, 5, 7, 3]
# 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
print('bubble sorting : ', n)
n = [8, 3, 6, 10, 9, 1, 7, 2, 4, 5]
print(n)
search_num = int(input('search_num:'))
# i가 0-n까지 if n[i]==search_num 을 만족하는 방이 있는가를 비교
flag = True
for i in range(0, len(n)):
if search_num == n[i]:
print(i, '번째 방에 있음')
flag = False # flag가 True이면 값이 없다. False이면 찾았다
break
if flag == True:
print('not found')
# 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
print('insert sorting', n)
n = [8, 3, 6, 10, 9, 1, 7, 2, 4, 5]
print('select sorting 예제 : ', n)
# 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
print('select sorting', n)
# 이진 탐색
search_num = int(input('[이진 탐색]search_num:'))
f = 0 # f: 리스트 검색 시작위치
l = len(n) - 1 # l: 리스트 검색 마지막위치
while f <= l: # 시작위치와 끝위치가 역전되지 않는한 반복
m = (f + l) // 2 # 리스트 중간 위치 찾기
if n[m] > search_num: # 중간값보다 찾는 값이 작으면 찾는 값이 중간값 앞에 있음
l = m - 1 # l를 중간 앞으로 이동
elif n[m] < search_num: # 중간값보다 찾는 값이 크면 찾는 값이 중간값 뒤에 있음
f = m + 1 # f를 중간값 뒤로 이동
else: # n[m]==search_num 인 경우로 m번째 방에서 찾음을 의미
print('found. idx:', m) # break로 루프 빠져나옴
break
if f > l: # f>l은 위 루프에서 break로 종료되지 않았음을 의미하고 이는 찾는 값이 없음을 의미
print('not found')