2015-08-24 92 views
-3
def quicksort(a,l,h): 
    if l>=h: 
     return 
    pivot = a[l] 
    i=l+1 
    for j in range(l+1,h+1): 
     if a[i]<pivot: 
      a[i],a[j] = a[j],a[i] 
      i+=1 
    a[l],a[i-1] = a[i-1],a[l] 
    quicksort(a,l,i-2) 
    quicksort(a,i,h) 


a = [6,7,8,9,5,1,2,3,4] 
print 'Before sort',a 
quicksort(a,0,len(a)-1) 
print 'After sort',a 

它适用于[9,8,7,6,5,4,3,2,1]但不适用于[6,7,8,9,5,1,2,3,4]为什么此代码无法正确运行所有输入?

+2

难道你不能一步一步地通过代码,找出自己为什么它不工作? –

回答

0

你写这个的方式不是很Pythonic,更类似于你如何在C中做它。它是否需要进行就地操作?用返回值来做它似乎更清楚:

def quicksort(a): 
    if len(a) <= 1: 
     return a 

    bot = [] 
    eq = [] 
    top = [] 
    pivot = a[0] 

    for x in a: 
     if x < pivot: 
      bot.append(x) 
     elif x == pivot: 
      eq.append(x) 
     else: 
      top.append(x) 

    return quicksort(bot) + eq + quicksort(top) 
+0

是的,我试图编写一个就地实现。 – Abhishek

相关问题