99# done.
1010
1111# Best = Average = O(nlog(n)); Worst = O(n^2
12+ import time
1213
1314def quickSort (myList , start , end ):
1415 if start < end :
@@ -27,10 +28,8 @@ def partition(myList, start, end):
2728 while not done :
2829 while left <= right and myList [left ] <= pivot :
2930 left = left + 1
30- print ('Now left is:' ,left )
3131 while myList [right ] >= pivot and right >= left :
3232 right = right - 1
33- print ('now righht is:' ,right )
3433 if right < left :
3534 done = True
3635 else :
@@ -44,6 +43,23 @@ def partition(myList, start, end):
4443 myList [right ]= temp
4544 return right
4645
46+ # A more efficient solution
47+ def quicksortBetter (arr ):
48+ if len (arr ) <= 1 :
49+ return arr
50+ pivot = arr [len (arr ) // 2 ]
51+ left = [x for x in arr if x < pivot ]
52+ middle = [x for x in arr if x == pivot ]
53+ right = [x for x in arr if x > pivot ]
54+ return quicksortBetter (left ) + middle + quicksortBetter (right )
55+
4756if __name__ == '__main__' :
4857 List = [3 , 4 , 2 , 6 , 5 , 7 , 1 , 9 ]
58+ start = time .time ()
4959 print ('Sorted List:' ,quickSort (List , 0 , len (List ) - 1 ))
60+ stop = time .time ()
61+ print ('Time Required:' , (stop - start ))
62+ start = time .time ()
63+ print ('Sorted List:' , quicksortBetter (List ))
64+ stop = time .time ()
65+ print ('Time Required:' , (stop - start ))
0 commit comments