如何解决为什么我的快速排序程序中出现此列表索引超出范围错误?
有人可以帮助我使用此COde吗,我知道错误的含义,但是无论我尝试多少,我都无法找到解决方案。如果有人告诉我我在哪里弄乱了代码,那将非常有帮助。
这只是我创建的类。
class AlgoTest:
def __init__(self):
self.li = []
len_list = int(input("Enter the number of elements you want in the list -->> "))
for i in range(len_list):
inp = int(input(f"Enter your {i} element -->> "))
self.li.append(inp)
“快速排序功能”问题:
def quick_sort(self,array,low,high):
if low < high:
loc = self.partiotion(arrp=array,lower=low,higher=high)
self.quick_sort(array,loc - 1)
self.quick_sort(array,loc + 1,high)
print("Sorted Array Using QUICK Sort -->> ",array)
这是Quicksort算法中使用的分区功能。这是错误的来源。
def partiotion(self,arrp,lower,higher):
pivot = arrp[lower]
start = lower
end = higher
while start < end:
while arrp[start] <= pivot:
start = start + 1
while arrp[end] > pivot:
end = end - 1
if start < end:
# arrp[start],arrp[end] = arrp[end],arrp[start]
temp = arrp[start]
arrp[start] = arrp[end]
arrp[end] = temp
# arrp[lower],arrp[lower]
temp = arrp[lower]
arrp[lower] = arrp[end]
arrp[end] = temp
return end
这些只是我在使用类调用函数时调用的对象。
a = AlgoTest()
lb = 0
ub = len(a.li) - 1
arr = a.li
a.quick_sort(arr,lb,ub)
这些是我得到的错误:
C:\Python\python.exe "C:/Imp softwares/Pycharm/Pycharm projects/python_GUI_tkinter/Algo_tester_part_2.py"
Enter the number of elements you want in the list -->> 5
Enter your 0 element -->> 23
Enter your 1 element -->> 12
Enter your 2 element -->> 0
Enter your 3 element -->> 14
Enter your 4 element -->> 8
Traceback (most recent call last):
File "C:/Imp softwares/Pycharm/Pycharm projects/python_GUI_tkinter/Algo_tester_part_2.py",line 132,in <module>
a.quick_sort(arr,ub)
File "C:/Imp softwares/Pycharm/Pycharm projects/python_GUI_tkinter/Algo_tester_part_2.py",line 88,in quick_sort
loc = self.partiotion(arrp=array,higher=high)
File "C:/Imp softwares/Pycharm/Pycharm projects/python_GUI_tkinter/Algo_tester_part_2.py",line 101,in partiotion
while arrp[start] <= pivot:
IndexError: list index out of range
Process finished with exit code 1
解决方法
您输入条件
while arrp[start] <= pivot:
start = start + 1
当start = 4时,在第5次迭代中,从0开始运行到4,
arrp[start] <= pivot
是正确的(8
你走进去做
start = start + 1
,然后尝试在start = 5且索引超出范围时再次检查
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。