정렬함수와 자리교환

gyeorrr·2023년 1월 27일
0

리스트를 정렬하는데에는 .sort 함수가 있다
하지만 지금 다뤄볼 건, 오름차순으로도 내림차순으로도, 글자순으로도 가능하며(글자순은 sort로도 가능) 앞으로 자주 쓸 수 있는 함수 정의를 다뤄보려고한다 물론 여기선 정렬만 해볼것임

우선 개념부터
n1 = 10
n2 = 20
두가지의 값이 있고 n1은 20으로 n2는 10으로 바꾸고싶다 그럴 때
파이썬외에 다른 언어 같은경우는

tmp = n1
n1 = n2
n2 = tmp

이런식으로 'tmp' 라는 값을 맡겨줄 수 있는 자리를 만들어준 뒤에 n1이 n2 걸 받아오고
n2 가 n1이 맡긴 tmp 의 값을 받아온다.

하지만 파이썬은 교환하는 방법이 간단하다

n1,n2 = n2,n1

끝.
이걸 이용해서 .sort와 같은 개념인 정렬을 해보고자한다.

정렬함수

numlist[2, 7, 4, 8, 6]

이값을 오름차순으로, 2, 4, 6, 7, 8 로 만들어보겠다
필요한 건 이중 for문range의 이해 그리고 리스트응용

풀이

numlist = [2, 7, 8, 4, 6]

for i in range(len(numlist) - 1):  
    for j in range(i,len(numlist)): #for j in range(i +1 ,len(numlist)): 
    
        if numlist[i] > numlist[j]:
            numlist[i], numlist[j] =  numlist[j] , numlist[i]
            
print('정렬 후 리스트' ,numlist)

for i in range(len(numlist) - 1): numlist길이 만큼 반복할건데 -1을 함으로써 4까지 반복 (마지막 것([4]의 자리를 제외하는 이유는 마지막 건 비교할 필요가 없기 떄문에)

for j in range(i,len(numlist)): #for j in range(i +1 ,len(numlist)): i부터 numlist길이 만큼 반복) 여기서 i +1 을 해주면 컴퓨터가 쓸데없이 반복하는 횟수를 줄일 수 있다 위의 -1과 같은 개념 첫번째(자기자신)는 비교할 필요가 없기 떄문에 제외하는 것
if numlist[i] > numlist[j]: i의 값이 j보다 큰 경우에
numlist[i], numlist[j] = numlist[j] , numlist[i] 자리교환
str도 된다.

이건 꼭 pythontutor를 통해서 한번 눈으로 확인해보자
.sort로도 되지만 이러한 방법도 있다는 걸 까먹지말자
선택정렬 알고리즘은 정확성을 보장받지만, 효율성은 매우 떨어진다

문자도 비교가 가능하다

위와 같이 값을 list안에 담는 것은 같다

# 4) 선택정렬을 이용하여 다음 리스트를 오름차순으로 정렬하세요
memberlist = ['짱구', '유리','맹구','훈이','철수']
print('정렬 전 멤버 : ',memberlist)

for i in range(len(memberlist)-1):            
    for j in range(i,len(memberlist)):       
        if memberlist[i] > memberlist[j]:
        memberlist[i],memberlist[j]=memberlist[j] > memberlist[i]
        
print('정렬 후 멤버 :', memberlist)

여기서 유심히 볼 것

for i in range(len(memberlist)-1):

해석 : memberlist의 길이(len)만큼 반복임 이것 때문에 숫자라고 생각을 했지만 아님 이건 그냥 범위를 잡는거다 짱구부터 훈이까지 반복하기위해서 쓰는 거임
밑에서 if로 비교하는 건 오로지 문자형str 이라는 걸 생각해야한다

그래서
for j in range(i,len(memberlist)):
짱구~훈이부터 짱구~철수 까지 반복하기
if memberlist[i] > memberlist[j]: 하나씩 비교하기 i가 j보다 문자열 값이 크다면
memberlist[i],memberlist[j]=memberlist[j] > memberlist[i] 자리를 서로 바꿔라
가 되는 것이다 str 한글도 ㄱㄴㄷ 순서대로 정렬이 가능함

0개의 댓글