python - 快速排序python实现
问题描述
def quicksort(a,start,end):
if(start<end):
#print(start,end)
p_index = partition(a,start,end)
quicksort(a,start,p_index-1)
quicksort(a,p_index+1,end)
def partition(a,start,end):
pivot = a[end]
pindex = start
for i in range(start,end):
if (a[i]<= pivot):
a[pindex],a[i]=a[i],a[pindex]
pindex = pindex+1
a[pindex],a[pivot]=a[pivot],a[pindex]
print(pindex)
return pindex
a = [7,6,5,0]
quicksort(a,0,3)
print(a)
这个实现给出了错误的输出。纠正我做错的地方。
解决方案
partition
函数中将枢轴元素交换到其最终位置的行不正确。pivot
是枢轴元素的值,而不是它的索引。那时枢轴的索引仍然是end
。
改变:
a[pindex],a[pivot]=a[pivot],a[pindex]
至:
a[pindex],a[end]=a[end],a[pindex]
或者可能:
a[end] = a[pindex] # we don't need to do a simultaneous swap because we already
a[pindex] = pivot # have a separate reference to the value of the pivot element
推荐阅读
- python - 通过引用传递与通过分配传递?C# 与 Python
- java - 从java中的excel读取单元格数据时,它返回十进制值
- c# - WIX - 回滚后启动程序
- java - 如何使用 Java 中的 Kafka 客户端显示主题?
- linux - 允许 docker 使用完整的 CPU 和底层 RAM
- python - 我怎样才能做这样的分割
- python-2.7 - 使用 opencv 和 cv::cvtColor 读取 RTSP 流问题
- java - 不同版本的相同罐子中的重复类 - Android
- javascript - TypeScript如何覆盖onClick事件签名
- autodesk-forge - Bim360:从模板创建清单的 API