使用堆栈python快速排序非递归

2024-10-05 13:02:36 发布

您现在位置: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)
    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

我不知道哪里出错了,我也跑不了,你能帮我吗?。谢谢。在


Tags: defdelafinalqswhilelistasuperior
1条回答
网友
1楼 · 发布于 2024-10-05 13:02:36
class Pila () : 
  inferior=0 
  superior=0

  lista = [8,5,6,4,3,2,10]

我想你希望lista定义不属于这个类

^{pr2}$

但这只是你的问题之一。。。在

另一个问题在这里

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)] 

那我想它至少会跑。。。不知道它是否能像你删掉的一样

相关问题 更多 >

    热门问题