첫번째파일
insertMod
# 삽입정렬
# 이건 좀 독특하다. 가시적으로 눈에띄게 보이진 않지만
# 처음 2개를 비교 후 정렬
# 처음 정렬된 2개와 다음1개를 비교후 재정렬
# 그렇게 정렬된 누적정렬 3개와 다음1개와 비교후 재정렬
# 이런식으로 증가해간다.
import copy
def sortInsertSortAlgorithm(ns, asc=True):
c_ns = copy.copy(ns)
# 인덱스 0은 정렬된 것이기때문에 1부터 시작하면 된다.
for i1 in range(1,len(c_ns)):
i2 = i1 -1
# 현재 정렬을 시키고자 하는 데이터
c_num = c_ns[i1]
# c_num이 들어갈 자리를 구해야한다.
# 오름차순인지 내림차순인지에 따라서
# ascending
if asc:
# 인덱스 0보다 더 아래로 내려가면 out of range 에러가 나오기때문에
# i2 >= 0을 해준다.
while c_ns[i2] > c_num and i2 >= 0:
c_ns[i2 + 1] = c_ns[i2]
i2 -= 1
# decending
else:
while c_ns[i2] < c_num and i2 >= 0:
c_ns[i2 + 1] = c_ns[i2]
i2 -= 1
c_ns[i2 + 1] = c_num
print(f'c_ns: {c_ns}')
return c_ns
두번째 파일
ex
import random
import insertMod
# 실행파일이 __main__과 같다면
if __name__ == '__main__':
nums = random.sample(range(1,21),10)
# 오름차순
print(f'not sorted nums: \n{nums}')
result = insertMod.sortInsertSortAlgorithm(nums)
print()
print(f'sorted nums by ASC: \n{result}')
print()
# 내림차순
print(f'not sorted nums: \n{nums}')
result = insertMod.sortInsertSortAlgorithm(nums,asc=False)
print()
print(f'sorted nums by DESC: \n{result}')
실행결과
not sorted nums:
[17, 13, 11, 19, 12, 18, 1, 16, 15, 14]
c_ns: [13, 17, 11, 19, 12, 18, 1, 16, 15, 14]
c_ns: [11, 13, 17, 19, 12, 18, 1, 16, 15, 14]
c_ns: [11, 13, 17, 19, 12, 18, 1, 16, 15, 14]
c_ns: [11, 12, 13, 17, 19, 18, 1, 16, 15, 14]
c_ns: [11, 12, 13, 17, 18, 19, 1, 16, 15, 14]
c_ns: [1, 11, 12, 13, 17, 18, 19, 16, 15, 14]
c_ns: [1, 11, 12, 13, 16, 17, 18, 19, 15, 14]
c_ns: [1, 11, 12, 13, 15, 16, 17, 18, 19, 14]
c_ns: [1, 11, 12, 13, 14, 15, 16, 17, 18, 19]
sorted nums by ASC:
[1, 11, 12, 13, 14, 15, 16, 17, 18, 19]
not sorted nums:
[17, 13, 11, 19, 12, 18, 1, 16, 15, 14]
c_ns: [17, 13, 11, 19, 12, 18, 1, 16, 15, 14]
c_ns: [17, 13, 11, 19, 12, 18, 1, 16, 15, 14]
c_ns: [19, 17, 13, 11, 12, 18, 1, 16, 15, 14]
c_ns: [19, 17, 13, 12, 11, 18, 1, 16, 15, 14]
c_ns: [19, 18, 17, 13, 12, 11, 1, 16, 15, 14]
c_ns: [19, 18, 17, 13, 12, 11, 1, 16, 15, 14]
c_ns: [19, 18, 17, 16, 13, 12, 11, 1, 15, 14]
c_ns: [19, 18, 17, 16, 15, 13, 12, 11, 1, 14]
c_ns: [19, 18, 17, 16, 15, 14, 13, 12, 11, 1]
sorted nums by DESC:
[19, 18, 17, 16, 15, 14, 13, 12, 11, 1]
Process finished with exit code 0
'개발일지 > Python' 카테고리의 다른 글
파이썬 재귀함수를 이용한 병합정렬 알고리즘 (0) | 2022.05.21 |
---|---|
파이썬 선택정렬 알고리즘 (오름차순, 내림차순) (0) | 2022.05.21 |
파이썬 [복기] 무한반복 계산기, 종료입력으로 종료. (0) | 2022.05.21 |
파이썬 class(클래스) 상속 기초원리7 추상클래스 ABCMeta, abstractmethod (0) | 2022.05.20 |
파이썬 class(클래스) 상속 기초원리6 재정의(오버라이딩) (0) | 2022.05.20 |