이 포스팅은 구름edu 의 파이썬으로 배우는 알고리즘 강의를 기반으로 코드를 작성했음을 밝힙니다.
리스트의 정렬 문제는 간단합니다.
문제 : n 개의 수로 구성된 리스트 S 를 비내림차순(오름차순)으로 정렬하시오.
해답 : S 를 비내림차순(오름차순)으로 정렬한 리스트
파라미터 : S, n
입력 사례 : S = [0,23,45,67,26,12,6]
입력 사례에 대한 출력 : S' = [0,6,12,,23,26,45,67]
알고리즘 : 모든 S 에 대해 S' 을 찾아주는 절차
- 정렬 하는 방법이 굉장히 다양함.
- 교환 정렬, 선택 정렬, 삽입 정렬, 퀵정렬, 합병 정렬 .. 등등
--------------------------------------------------------------------------------------------
이번 포스팅은 그 많은 방법 중 교환 정렬 코드를 다뤘습니다.
교환 정렬은 정렬 방법 중에서 가장 코드로 작성하기 간단합니다.
교환 정렬은
i 번째 자리에 존재하는 숫자와 (i+1)부터 n 번째 자리에 존재하는 수를 차례대로 비교 하면 됩니다.
그렇기 때문에 i 번째 자리를 위한 for, (i+1)부터 n 번째 자리를 위한 for 이렇게 이중 for 문을 이용해야겠네요.
또한 비교를 해야하기 때문에 if 문 하나가 들어갈 것입니다.
바깥에 있는 for 문이 한번 돌아갈 때마다 (저는 이것을 라운드라고 표현합니다.) 가장 작은 수가 앞으로 오게 됩니다.
예를 들어, 첫번째 라운드가 실행되었을 때(바깥쪽 for 문이 실행되었을 때),
리스트의 맨 처음 숫자가 가장 작은 숫자로 변하게 되는 것입니다.
마찬가지로 두번째 라운드가 실행되었을 때는 리스트의 두번째 숫자가 두번째로 작은 숫자로 오게 되겠죠.
다른 언어로 프로그래밍 하셨던 분들에게는 익숙하지 않겠지만,
파이썬 에서는 SWAP을 아래와 같은 형태로 할 수 있습니다.
A,B = B,A
간단하죠?
다른 언어는 tmp 선언해서 바꿔주고 바꿔주고 하는데,, 역시 파이썬,,
[ Code ]
def exchange_sort(S):
n=len(S)
for i in range(n-1):
for j in range(i+1,n):
if(S[i] > S[j]):
S[i],S[j]=S[j],S[i]
return S
S = [0,23,45,67,26,12,6]
print("원 리스트 : ",S)
exchange_sort(S)
print("정렬된 리스트 : ",S)
'Archive > Develop' 카테고리의 다른 글
[ Python ] 파이썬 이분 검색(Binary Search) 코드 | 순차 탐색 vs 이분 검색 (0) | 2021.01.07 |
---|---|
[ Python ] 파이썬 행렬의 곱셈 코드 | 파이썬 정방행렬 곱셈 (0) | 2021.01.07 |
[ Python ] 파이썬 순차 탐색 문제 코드 | 순차 탐색 알고리즘 | 파이썬 알고리즘 (0) | 2021.01.07 |
포스팅 할 주제들 (0) | 2021.01.03 |
[ JSON ] JSON 이란? | JSON 개념 | JSON 예제 (0) | 2021.01.03 |