01/10/2018, 16:17
Lỗi khi lập trình giải thuật mergesort bằng python
Mình đang viết chương trình cho thuật toán sắp xếp trộn bằng python bị lỗi “list index out of range”. Có ai biết chỉ giúp mình cách fix được ko ạ
def merge(arr, left, mid, right):
i = left
j = mid+1
temp = []
n = len(arr)
while ((i<=mid) and (j<=right)):
if (arr[i]<=arr[j]):
temp.append(arr[i])
i+=1
else:
temp.append(arr[j])
j+=1
if (i<=mid):
temp.extend(arr[i:mid])
if (j<=right):
temp.extend(arr[j:right])
for x in range(n):
arr[x]=temp[x]
def mergesort(arr, left, right):
if (left<right):
mid = int((left+right)/2)
mergesort(arr, left, mid)
mergesort(arr, mid+1, right)
merge(arr, left, mid, right)
arr = [9, 8, 10, 8, 11]
mergesort(arr, 0, len(arr)-1)
print(arr)


CodeInterview - Pair Programming for Interviews
Cloud-based live programming tool for code interviews
Bài liên quan
Mình có chạy thử code của bạn thì
temp = [8]
,n = 5
.temp
không có đủ n phần tử, do vậy khi truy cập vàotemp[x]
vớix > 0
thì code văng lỗi.Có một sự thật là khi bạn gán
n = len(arr)
thì n luôn cố định Với lại, thuật toán của bạn sai rồi.Mình nghĩ thuật toán đúng chứ bạn, python mình mới học, mình viết theo code của c++. Bạn nói rõ hơn được ko, list mình tưởng dùng append sẽ tự thêm phần tử bé hơn vào list temp trung gian
Mấy hôm nay siêng đột xuất, chạy tay cho bạn luôn nè
Cảm ơn bạn nhiều nhé, mình sửa được r, mình mới chuyển qua python nên chưa hiểu index của list lắm