J'ai décidé d'apprendre un tri rapide pour trier une colonne FizzBuzz aléatoire.
Le tri rapide se caractérise par un très petit nombre de comparaisons et d'échanges de données et constitue le moyen le plus efficace de trier les données disjointes communes (données dispersées au hasard).
Quick Sort est un algorithme de tri considéré comme le plus rapide en pratique et utilisé dans de nombreux programmes. http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/quick-sort.html
J'ai remplacé le code Java sur le site ci-dessus par python (probablement presque tel quel).
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)
Il y a trop d'endroits pour juger de la relation de taille. Que devrais-je faire?