I decided to learn quicksort to sort a random FizzBuzz column.
Quicksort is characterized by a very small number of data comparisons and exchanges, and is the most efficient way to sort common disjointed data (randomly scattered data).
Quicksort is a sorting algorithm that is considered to be the fastest in practice and is used in many programs. http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/quick-sort.html
I replaced the Java code on the above site with python (probably almost as it is).
import random
def make_randoms(start=1,finish=100):
seq = range(start,finish+1)
randoms = []
while seq:
randoms.append(seq.pop(random.randint(0,len(seq)-1)))
return randoms
def pivot(target, i, j):
k = i + 1
while k <= j and target[i] == target[k]: k += 1
if k > j: return -1
if target[i] >= target[k]:
return i
else:
return k
def partition(target, i, j, x):
l, r = i, j
while l <= r:
while l <= j and target[l] < x: l += 1
while r >= i and target[r] >= x: r -= 1
if l > r: break
target[l], target[r] = target[r], target[l]
l, r = l + 1, r - 1
return l
def quick_sort(target,i ,j):
if i == j: return
p = pivot(target, i, j)
if p != -1:
k = partition(target, i, j, target[p])
quick_sort(target, i, k-1)
quick_sort(target, k, j)
There are too many places to judge the size relationship. What should I do?