파이썬 비재귀 병합정렬
조회수 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 답변
-
while(k < num):
루프 안쪽에left
변수를 초기화하는 부분이 없습니다. 다음과 같이 바꿔보세요.... while(k < num): left = 0 while(left + k < num): ...
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력