Advertisement
iggr

quick_sort

Apr 11th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.02 KB | None | 0 0
  1. import random
  2.  
  3. def quick_sort(myList, start=None, end=None):
  4.     if start is None:
  5.         start = 0
  6.         end = len(myList)
  7.     if start + 1 >= end:
  8.         return
  9.    
  10.     pivot_ind = random.randint(start, end-1)
  11.     pivot_val = myList[pivot_ind]
  12.            
  13.     myList[start], myList[pivot_ind] = myList[pivot_ind], myList[start]
  14.    
  15.     j = start + 1           # put here elements greater than pivot
  16.     k = start + 1           # put here elements equal to pivot
  17.     for i in range(start+1, end):
  18.         if myList[i] < pivot_val :
  19.             myList[i], myList[j] = myList[j], myList[i]
  20.             j += 1
  21.         if myList[i] == pivot_val :
  22.             myList[i], myList[j] = myList[j], myList[i]  
  23.             myList[j], myList[k] = myList[k], myList[j]
  24.             k += 1
  25.             j += 1        
  26.        
  27.     for n in range(start, k):
  28.          myList[n], myList[j-1-(n-start)] = myList[j-1-(n-start)], myList[n]
  29.            
  30.     quick_sort(myList, start, j -(k-start) )
  31.     quick_sort(myList, j, end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement