
⬇️ [알고리즘] 버블정렬, 삽입정렬, 선택정렬 이론
숫자로 이루어진 리스트를 버블정렬 알고리즘을 이용해서
오름차순과 내림차순으로 정렬하는 모듈을 만들어보자
(단, 정렬하는 과정도 출력하도록 한다.)
#bubble 모듈
def bubble_sorted(list,acs = True,deepcopy=True) :
if deepcopy :
import copy
sorted_list = copy.copy(list)
else :
sorted_list = list
for i in range(len(sorted_list)-1):
for j in range(len(sorted_list)-1):
if acs:
if sorted_list[j] > sorted_list[j+1] :
sorted_list[j], sorted_list[j+1] = sorted_list[j+1], sorted_list[j]
print(f'[acs]sorting list : {sorted_list}')
else :
if sorted_list[j] < sorted_list[j+1] :
sorted_list[j], sorted_list[j+1] = sorted_list[j+1], sorted_list[j]
print(f'[desc]sorting list : {sorted_list}')
return sorted_list
#실행파일
import random
list = random.sample(range(1,100),20)
print(f'list : {list}')
import bubble
asc = bubble.bubble_sorted(list,True,True)
print(f'sorted list by asc : {asc}')
desc = bubble.bubble_sorted(list,False,True)
print(f'sorted list by asc : {desc}')
처음엔 acs와 desc 두가지를 return하는 모듈로 코드를 짰으나,
함수 defalt옵션을 사용해서
True일 경우 acs False일 경우 desc를 return하도록
코드를 수정했다.
깊은복사가 defalt일 경우라면
deepcopy를 제외시키고 바로 copy모듈을 사용해서 sorted_list를 생성해도 된다.
숫자로 이루어진 리스트를 삽입정렬 알고리즘을 이용해서 오름차순과 내림차순으로 정렬하는 모듈
단, 정렬하는 과정도 출력하도록 한다.
#insert모듈
def sorted_fun(list,acs=True,deepcopy=False):
if deepcopy :
import copy
sorted_list = copy.copy(list)
else :
sorted_list = list
for i in range(1,len(sorted_list)):
for j in range(i,0,-1) :
if acs :
if sorted_list[j] < sorted_list[j-1] :
sorted_list[j], sorted_list[j-1] = sorted_list[j-1], sorted_list[j]
else :
if sorted_list[j] > sorted_list[j-1] :
sorted_list[j], sorted_list[j-1] = sorted_list[j-1], sorted_list[j]
print(f'sorting list : {sorted_list}')
return sorted_list
#실행파일
nums = [19,10,3,5,13,4,12,17,8,16]
print(f'nums : {nums}')
import insert
asc = insert.sorted_fun(nums,True)
print(f'sorted nums by asc : {asc}')
desc = insert.sorted_fun(nums,True)
print(f'sorted nums by desc : {desc}')
삽입정렬은 뒤에서 앞과 비교해서 작은수를 앞으로 보내는 정렬 방법이다.
뒤에서 앞과 비교해야하기 때문에
for i in range(1,len(sorted_list)) :
의 range를 1번 인덱스부터 시작하고,
중첩반복문으로 j를 1번 idx까지 -1 로 반복한다.
리스트의j가 j-1과 클 경우 desc 작을경우 asc이다.
숫자로 이루어진 리스트를 선택정렬 알고리즘을 이용해서
오름차순과 내림차순으로 정렬하는 모듈을 만들어보자.
#select 모듈
def sorted_fun(list,asc=True,deepcopy=True):
if deepcopy :
import copy
sorted_list = copy.copy(list)
else :
sorted_list = list
for i in range(len(sorted_list)-1) :
min_idx = i
for j in range(i+1,len(sorted_list)) :
if asc:
if sorted_list[j] < sorted_list[min_idx] :
sorted_list[j], sorted_list[min_idx] = sorted_list[min_idx], sorted_list[j]
else :
if sorted_list[j] > sorted_list[min_idx] :
sorted_list[j], sorted_list[min_idx] = sorted_list[min_idx], sorted_list[j]
print(f'sorting list : {sorted_list}')
return sorted_list
#실행파일
import random
nums = random.sample(range(1,21),10)
print(f'not sorted nums : {nums}')
import select
asc = select.sorted_fun(nums,True)
print(f'sorted nums by asc : {asc}')
desc = select.sorted_fun(nums,False)
print(f'sorted nums by desc : {desc}')