모두의 파이썬 unit07-선택정렬

일반적인 선택정렬 알고리즘

틀린것

#선택정렬
#입력:리스트a
#출력:없음(입력으로 주어진 a가 정렬됨)

def sel_sort(a):
    n=len(a)
    for i in range(0,n-1): #0부터 n-2번까지 반복
        #i번 위치부터 끝까지 자료값중 최솟값의 위치를 찾음

        min_idx=i

        for j in range(i+1,n):
            if a[j]<a[min_idx]:
                min_idx=j
                #찾은 최솟값을 i번 위치로
                #그러니까 아까처럼 리스트를 하나더 만들지 않고 한개 리스트 안에서 요소들의 위치를 바꿔버리면 된다!!
                a[i],a[min_idx]=a[min_idx],a[i]

d=[2,4,5,1,3]

sel_sort(d)

print(d)
        

정답

#선택정렬
#입력:리스트a
#출력:없음(입력으로 주어진 a가 정렬됨)

def sel_sort(a):
    n=len(a)
    for i in range(0,n-1): #0부터 n-2번까지 반복
        #i번 위치부터 끝까지 자료값중 최솟값의 위치를 찾음

        min_idx=i

        for j in range(i+1,n):
            if a[j]<a[min_idx]:
                min_idx=j
                #찾은 최솟값을 i번 위치로
                #그러니까 아까처럼 리스트를 하나더 만들지 않고 한개 리스트 안에서 요소들의 위치를 바꿔버리면 된다!!
        a[i],a[min_idx]=a[min_idx],a[i] #이구문이 if문 밖으로 나와야 한다.

d=[2,4,5,1,3]

sel_sort(d)

print(d)
        

내림차순 버전

#선택정렬
#입력:리스트a
#출력:없음(입력으로 주어진 a가 정렬됨)
#내림차순정렬
def sel_sort(a):
    n=len(a)
    for i in range(0,n-1): #0부터 n-2번까지 반복
        #i번 위치부터 끝까지 자료값중 최솟값의 위치를 찾음

        min_idx=i

        for j in range(i+1,n):
            if a[j]>a[min_idx]: #<를 >게 수정하면 된다.
                min_idx=j
                #찾은 최솟값을 i번 위치로
                #그러니까 아까처럼 리스트를 하나더 만들지 않고 한개 리스트 안에서 요소들의 위치를 바꿔버리면 된다!!
        a[i],a[min_idx]=a[min_idx],a[i] 

d=[2,4,5,1,3]

sel_sort(d)

print(d)
        

추가적으로 궁금했던것

왜 쉽게 설명한 것은 print(함수(리스트))였는데, 일반적인 선택정렬은 print(d)로 끝났을까??
답: 일반 선택정렬에서는 리턴 값이 없음 따라서

#선택정렬
#입력:리스트a
#출력:없음(입력으로 주어진 a가 정렬됨)
#내림차순정렬
def sel_sort(a):
    n=len(a)
    for i in range(0,n-1): #0부터 n-2번까지 반복
        #i번 위치부터 끝까지 자료값중 최솟값의 위치를 찾음

        min_idx=i

        for j in range(i+1,n):
            if a[j]>a[min_idx]: #<를 >게 수정하면 된다.
                min_idx=j
                #찾은 최솟값을 i번 위치로
                #그러니까 아까처럼 리스트를 하나더 만들지 않고 한개 리스트 안에서 요소들의 위치를 바꿔버리면 된다!!
        a[i],a[min_idx]=a[min_idx],a[i] 
    return a #이렇게 return 값을 지정하고

d=[2,4,5,1,3]



print(sel_sort(d))#이렇게 출력하면 값이 나온다!!
        

좋은 웹페이지 즐겨찾기