파이썬 선택정렬, 삽입정렬 질문

조회수 794회

밑의 코드를 분석해서 주석을 달아오는 숙제가 있는데, index와 temp_index, 반복문의 설명이 부족하다고 충고를 받았습니다. 근데 정확히 어떻게 보충해야 할지 감이 안 잡혀서... 질문을 남겨봅니다.

#선택정렬(오름차순)

number_list = [45,7,8,1,9,78]

def selection_sort(number_list): 
    n = len(number_list) # n = 6

    for x in range(n-1): 
        temp_index = x
        # 최솟값을 구해 temp_index의 값으로 지정

        for y in range(x,n): 
            if number_list[temp_index] > number_list[y]:
                # 괄호의 방향을 반대로 하면 최댓값을 구하여, 내림차순의 선택정렬이 된다.

                temp_index = y
                # 최솟값을 찾기 위해 두 수를 비교하는 과정

        number_list[temp_index],number_list[x] = number_list[x],number_list[temp_index]
        # 가장 왼쪽 값과 최소값인 두 수를 교체하는 과정

        print(number_list)

        '''
        [1, 7, 8, 45, 9, 78]
        [1, 7, 8, 45, 9, 78]
        [1, 7, 8, 45, 9, 78]
        [1, 7, 8, 9, 45, 78]
        [1, 7, 8, 9, 45, 78]
        [1, 7, 8, 9, 45, 78]
        '''

    return number_list
    # return을 쓰는 이유: 함수의 결과 값을 돌려주어 저장시킴.

print(selection_sort(number_list))

'''
정렬 횟수가 n-1인 이유: n개의 숫자가 있을 떼, n-1번 정렬을 시키면 나머지 하나는 알아서 자리를 찾아가기 때문.
'''

#삽입정렬(오름차순)

number_list = [45,7,8,1,9,78]

def insertion_sort(number_list):
    n = len(number_list)

    for x in range(1,n):
        # 둘째값부터 판별해야 하기때문에 0이 아닌 1을 넣는다

        index = x
        # index: 자리값

        for y in range(x):
            if number_list[x] < number_list[y]:
                index -= 1
                # 두 수를 비교해서 현재 값이 왼쪽 값보다 작을 경우, 자릿값을 1 낮춘다(왼쪽으로 옮긴다.)

        number_list.insert(index,number_list.pop(x))
        # (자리, 값) / pop을 쓰는 이유: 중복값을 배제하기 위하여

        print(number_list)
        '''
        [7, 45, 8, 1, 9, 78]
        [7, 8, 45, 1, 9, 78]
        [1, 7, 8, 45, 9, 78]
        [1, 7, 8, 9, 45, 78]
        [1, 7, 8, 9, 45, 78]
        [1, 7, 8, 9, 45, 78]
        '''


    return number_list
print(insertion_sort(number_list))

'''
x: 왼쪽값 y:현재 비교값
'''
  • 무엇을 정확이 묻고자 하시는지 잘 모르겠네요. variable 이름들이 조금 따라가기 힘들게 느껴지고 (x, y, index, 등등), 그리고 왜 range값들이 바뀌는지 (range(n-1) vs range(1,n))도 자세하게 또는 clear하게 코드하시면 좋을듯 싶네요 알 수 없는 사용자 2019.3.23 06:16

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)