본문 바로가기
개발일지/Python

삽입정렬 알고리즘 (오름차순, 내림차순)

by 다니엘의 개발 이야기 2022. 5. 21.
320x100

첫번째파일

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

300x250