Python algorithm quick sorting
#-*-Coding: UTF-8-*-from random import randint, shuffle def _ partition (seq, p, r): "" array division, pseudo code: PARTITION (, p, r) 1 x branch A [r] // as the division principal component 2 I branch P-1 3 for j Branch p to R-1 4 do if A [j] <= x 5 then I Branch I + 1 // index 6 exchange A [I] A [j] // the small value is exchanged to the first 7 exchange A [I + 1] A [r] // [r] switch to the end of the front area 8 return I + 1 T (n) = θ (n) "" x = seq [r] I = p-1 for j in range (p, r): if seq [j] <= x: I + = 1 seq [I], seq [j] = Seq [j], seq [I] I + = 1 seq [I], seq [r] = seq [r], seq [I] return I def _ quick_sort (seq, p, r): "recursive call. the pseudo code is as follows: QUICKSORT (A, p, r) 1 if p <r 2 then q PARTITION (A, p, r) 3 QUICKSORT (A, p, q-1) 4 QUICKSORT (A, q + 1, r) T (n) = θ (n ^ 2) "if p> = r: return q = _ partition (seq, p, r) _ quick_sort (seq, p, q-1) _ quick_sort (seq, q + 1, r) def quick_sort (seq ): "Fast sorting Args: seq (Sequence): a Sequence object. "" _ Quick_sort (seq, 0, len (seq)-1) def _ rand_partition (seq, p, r): "random sampling is switched before division, the pseudo code is as follows: RANDOMIZED-PARTITION (A, p, r) 1 I RANDOM (p, r) // from A [p .. r] randomly selects A 2 exchange A [r] A [I] // A [r] and exchanges 3 return PARTITION (A, p, r) T (n) = O (n) "I = randint (p, r) seq [r], seq [I] = seq [I], seq [r] return _ partition (seq, p, r) def _ rand_qsort (seq, p, r): "" recursive call of the random sampling division method. the pseudo code is as follows: RANDOMIZED-QUICKSORT (A, p, r) 1 if p <r 2 then q ← RANDOMIZED-PARTITION (A, p, r) 3 RANDOMIZED-QUICKSORT (A, p, q-1) 4 RANDOMIZED-QUICKSORT (A, q + 1, r) T (n) = O (n ^ 2) "if p> = r: return q = _ rand_partition (seq, p, r) _ rand_qsort (seq, p, q-1) _ rand_qsort (seq, q + 1, r) def rand_qsort (seq ): "quick sorting (randomization version)" "_ rand_qsort (seq, 0, len (seq)-1) def qsort (L ): "quick sort (simple version) more: Python Cookbook 2nd Edition Chapter 5.11" if not L: return [] return qsort ([x for x in L [1:] if x <L [0]) + L [0: 1] + \ qsort ([x for x in L [1:] if x> = L [0]) if _ name _ = '_ main _': import timeit items = range (10000) shuffle (items) def test_sorted (): print (items) sorted_items = sorted (items) print (sorted_items) def test_quick_sort (): print (items) quick_sort (items) print (items) test_methods = [test_sorted, test_quick_sort] # Sort, test_qsort for test in test_methods: name = test. _ name _ # test. func_name t = timeit. timer (name + '()', 'from _ main _ import' + name) print (name + 'takes time: % f' % t. timeit (1 ))