QuickSort非递归堆栈python

时间:2014-01-27 19:00:02

标签: 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

我不知道哪里出错了,我不能跑它,你能帮助我吗?感谢。

1 个答案:

答案 0 :(得分:0)

class Pila () : 
  inferior=0 
  superior=0

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

我认为你想要在这个类之外的lista定义

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

然后我认为它至少会运行......不知道它是否会做你所说的