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)
Code Interview
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.tempkhông có đủ n phần tử, do vậy khi truy cập vàotemp[x]vớix > 0thì 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