편집 기록

편집 기록
  • 프로필 엽토군님의 편집
    날짜2019.03.22

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


    밑의 코드를 분석해서 주석을 달아오는 숙제가 있는데, 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:현재 비교값
    '''
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.03.22

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


    밑의 코드를 분석해서 주석을 달아오는 숙제가 있는데, 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:현재 비교값 '''