2012-11-14 80 views
0

我有什麼應該是一個簡單的快速排序實現,但它返回遞歸深度超出的錯誤,我測試它在少於30個元素的列表。而且,我的實現前幾天正在製作一個10,000的列表,我改變的唯一辦法是將它從一個類移到一個全局函數。任何人都看到可能造成這種情況的原因QuickSort返回遞歸深度錯誤

def quickSort(m, left, right): 
    if len(m[left:right]) <= 1: 
     return m 
    pivot = m[left] 
    i = left + 1 
    j = left + 1 
    for j in range(j, right): 
     if m[j] <= pivot: 
      m[j], m[i] = m[i], m[j] 
      i += 1 
    m[left], m[i-1] = m[i-1], m[left] 
    m = quickSort(m, left, i) 
    m = quickSort(m, i, right) 
    return m 
+2

'爲j在範圍內(j,右):'不能很好(至少對於可讀性) – amit

+0

添加一些打印語句並重新運行以查看它的進展情況。 –

回答

2

您的遞歸調用的一個原因造成的異常(如你可能已經猜到了:-),也請注意,您在地方排序列表,以便返回列表是沒有必要的

def quickSort(m, left, right): 
    if right - left <= 1: 
     return 

    pivot = m[left] 
    i = left + 1 
    j = left + 1 
    for j in range(j, right): 
     if m[j] <= pivot: 
      m[j], m[i] = m[i], m[j] 
      i += 1 
    m[left], m[i-1] = m[i-1], m[left] 
    quickSort(m, left, i-1) 
    quickSort(m, i, right) 
+0

是的,在對子列表進行排序時應該排除主鍵。好的,我錯過了:) –