使用堆栈python进行非递归快速排序
我有这个密码:使用堆栈python进行非递归快速排序,python,Python,我有这个密码: class Pila () : inferior=0 superior=0 lista = [8,5,6,4,3,2,10] def quicksortNoRec (lista) : """Ordena la lista siguiendo el algoritmo quicksort o de ordenacin rapida. Forma no recursiva""" qs(lista,0,len(lista)-1)
class Pila () :
inferior=0
superior=0
lista = [8,5,6,4,3,2,10]
def quicksortNoRec (lista) :
"""Ordena la lista siguiendo el algoritmo quicksort
o de ordenacin rapida. Forma no recursiva"""
qs(lista,0,len(lista)-1)
return lista
def qs (lista,inicial,final) :
p=1
"declaramos la pila de estructuras"
pila=[20]
for m in range(0,20) :
pila=Pila()
"ahora se comienza a ordenar"
pila[p].inferior,pila[p].superior=inicial,final
while p :
inicial,final=pila[p].inferior,pila[p].superior
p-=1
izdo,dcho=inferior,superior
while inferior<dcho :
izdo,dcho=inferior,superior
mitad=lista[izdo+((dcho-izdo)/2)]
while izdo<=dcho :
while lista[izdo]<mitad and izdo<final : izdo+=1
while mitad<lista[dcho] and dcho>inicial : dcho-=1
if izdo<=dcho :
lista[izdo],lista[dcho]=lista[dcho],lista[izdo]
izdo+=1
dcho-=1
if izdo<final :
p+=1
pila[p].inferior,pila[p].superior=izdo,final
final=dcho
return lista
类Pila():
次=0
上级=0
lista=[8,5,6,4,3,2,10]
def quicksortNoRec(列表A):
“Ordena la lista siguiendo el algoritmo快速排序
o快速奥德纳辛。无复发形式“
qs(lista,0,len(lista)-1)
返回列表a
def qs(列表、正式、最终):
p=1
“结构宣言”
皮拉=[20]
对于范围(0,20)内的m:
pila=pila()
“阿霍拉·科米恩扎·奥德纳尔”
皮拉[p]。下,皮拉[p]。上=正式,最终
而p:
第一名,最后一名=皮拉[p]。下一名,皮拉[p]。上一名
p-=1
izdo,dcho=低级,高级
低劣
我想你想要一个这个类之外的定义
class Pila () :
inferior=0
superior=0
lista = [8,5,6,4,3,2,10]
但这只是你的问题之一
另一个问题在这里
def qs (lista,inicial,final) :
p=1
"declaramos la pila de estructuras"
pila=[20]
for m in range(0,20) :
pila=Pila()
我很确定你想要
def qs (lista,inicial,final) :
p=1
"declaramos la pila de estructuras"
pila=[Pila() for m in range(0,20)]
那么我想它至少会运行。。。不知道它是否会像您所说的那样,但是您是否收到任何类型的错误消息?它应该做什么?它没有递归和堆栈的顺序数字,但我是python新手,我不知道如何运行代码,如果我调用函数qs,它会显示一个错误:回溯(最后一次调用):文件“name of File.py”,第42行,在打印quicksortNoRec(lista)中名称错误:名称“lista”未定义您如何称呼它?您需要给它一个列表来排序try
print quickSortNoRec([5,10,20,1,2,3,55])
。。。为什么不告诉它“lista”?与[1,2…[20]
类似,表示包含1个元素的列表,该元素为20
。如果希望pila=[]
无任何内容,则会显示一个错误:回溯(最近一次调用):文件“pythonpilas”,第37行,打印quicksortNoRec([5,10,20,1,2,3,55]),文件“pythonpilas”,第8行,在quicksortNoRec qs中(lista,0,len(lista)-1) 文件“pythonpilas”,第20行,在qs-izdo中,dcho=subsier,superior-NameError:全局名称“subsier”没有定义……嗯……我不确定这些值应该是什么……这段代码真的有问题……你从哪里得到的?为什么不从头开始……或者用伪代码编写它,然后翻译成python呢包括伪代码?
def qs (lista,inicial,final) :
p=1
"declaramos la pila de estructuras"
pila=[Pila() for m in range(0,20)]