Search code examples
pythonarraysquicksort

quick sort python implementation


def quicksort(a,start,end):
    if(start<end):
        #print(start,end)
        p_index = partition(a,start,end)
        quicksort(a,start,p_index-1)
        quicksort(a,p_index+1,end)

def partition(a,start,end):
    pivot = a[end]
    pindex = start
    for i in range(start,end):
        if (a[i]<= pivot):
            a[pindex],a[i]=a[i],a[pindex]
            pindex = pindex+1
    a[pindex],a[pivot]=a[pivot],a[pindex]
    print(pindex)
    return pindex

a = [7,6,5,0]
quicksort(a,0,3)
print(a)

this implementation is giving out the wrong output. Correct me where I'm doing it wrong.


Solution

  • The line in your partition function where you swap the pivot element into its final position is incorrect. pivot is the value of the pivot element, not its index. The index of the pivot at that point is still end.

    Change:

    a[pindex],a[pivot]=a[pivot],a[pindex]
    

    to:

    a[pindex],a[end]=a[end],a[pindex]
    

    or maybe:

    a[end] = a[pindex]  # we don't need to do a simultaneous swap because we already
    a[pindex] = pivot   # have a separate reference to the value of the pivot element