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

파이썬 선택정렬 알고리즘 (오름차순, 내림차순)

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

첫번째 파일

selectMod

 

# 선택정렬
# 숫자로 이루어진 리스트를 선택정렬 알고리즘을 이용해서
# 오름차순과 내림차순으로 정렬하는 모듈을 만들어보자(단, 정렬하는 과정도 출력한다.)

import copy
# 이와같이 매개변수에 True or False 값이 들어가야하는 상황에서는
# True일 경우, 입력을 생략할 수있고, 입력을 생략할경우 True로 실행된다.
def sortSelectAlgorithm(ns, asc=True):
    c_ns = copy.copy(ns)

    for i in range(len(c_ns)-1):
        minIdx = i

        for j in range(i+1, len(c_ns)):

            # 오름차순, ascending
            if asc:

                if c_ns[minIdx] > c_ns[j]:
                    minIdx = j

            # 내림차순, descending
            else:
                if c_ns[minIdx] < c_ns[j]:
                    minIdx = j

        c_ns[i], c_ns[minIdx] = c_ns[minIdx], c_ns[i]
        print(f'nums: {c_ns}')

    return c_ns

 

두번째 파일

ex

 

import random as rd
import selectMod

if __name__ == '__main__':

    nums = rd.sample(range(1,21),10)

    # 오름차순
    print(f'not sorted nums: \t{nums}')
    print()
    result = selectMod.sortSelectAlgorithm(nums)
    print(f'sorted nums by ASC: {result}')
    print()

    # 내림차순
    print(f'not sorted nums: \t{nums}')
    print()
    result = selectMod.sortSelectAlgorithm(nums,asc=False)
    print(f'sorted nums by ASC: {result}')

 

 

실행결과

 

 

not sorted nums:  [3, 19, 8, 12, 5, 7, 13, 2, 16, 18]

nums: [2, 19, 8, 12, 5, 7, 13, 3, 16, 18]
nums: [2, 3, 8, 12, 5, 7, 13, 19, 16, 18]
nums: [2, 3, 5, 12, 8, 7, 13, 19, 16, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 19, 16, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 19, 16, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 19, 16, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 19, 16, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 16, 19, 18]
nums: [2, 3, 5, 7, 8, 12, 13, 16, 18, 19]
sorted nums by ASC: [2, 3, 5, 7, 8, 12, 13, 16, 18, 19]

not sorted nums:  [3, 19, 8, 12, 5, 7, 13, 2, 16, 18]

nums: [19, 3, 8, 12, 5, 7, 13, 2, 16, 18]
nums: [19, 18, 8, 12, 5, 7, 13, 2, 16, 3]
nums: [19, 18, 16, 12, 5, 7, 13, 2, 8, 3]
nums: [19, 18, 16, 13, 5, 7, 12, 2, 8, 3]
nums: [19, 18, 16, 13, 12, 7, 5, 2, 8, 3]
nums: [19, 18, 16, 13, 12, 8, 5, 2, 7, 3]
nums: [19, 18, 16, 13, 12, 8, 7, 2, 5, 3]
nums: [19, 18, 16, 13, 12, 8, 7, 5, 2, 3]
nums: [19, 18, 16, 13, 12, 8, 7, 5, 3, 2]
sorted nums by ASC: [19, 18, 16, 13, 12, 8, 7, 5, 3, 2]

Process finished with exit code 0

300x250