파이썬 비재귀 병합정렬

조회수 1564회
def seq_merge_sort(arr):
    rght = 0; wid = 0; rend = 0; left = 0
    k = 1

    num = len(arr)
    temp = [0] * num

    while(k < num):
        while(left + k < num):
            rght = left + k
            rend = rght + k
            if(rend > num):
                rend = num
            m = left; i = left; j = rght

            while(i < rght and j < rend):
                if (arr[i] <= arr[j]):
                    temp[m] = arr[i]
                    i += 1
                else:
                    temp[m] = arr[j]
                    j += 1
                m += 1

            while(i < rght):
                temp[m] = arr[i]
                i += 1; m += 1
            while(j < rend):
                temp[m] = arr[j]
                j += 1; m += 1
            m = left
            while(m < rend):
                arr[m] = temp[m]
                m += 1
            left += k * 2
        k *= 2
    return arr

파이썬을 이용해 만든 비재귀 병합정렬입니다.

그런데 이게 케이스 바이 케이스로 되었다 안되었다 합니다.

정렬이 완전히 될 때가 있고 되다 말 때가 있습니다.

고쳐주실 수 있는 고수님들께 도움 간절히 요청합니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 되다 마는 케이스를 다음과 같이 구체적으로 올려주시면 도움이 됩니다. (1) 내가 넣은 것 (2) 내가 기대한 것 (3) 내가 얻은 것 엽토군 2019.11.15 11:20

1 답변

  • while(k < num): 루프 안쪽에 left 변수를 초기화하는 부분이 없습니다. 다음과 같이 바꿔보세요.

    ...
        while(k < num):
            left = 0
            while(left + k < num):
    ...
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)