Ich beschloss, eine schnelle Sortierung zu lernen, um eine zufällige FizzBuzz-Spalte zu sortieren.
Die schnelle Sortierung zeichnet sich durch eine sehr geringe Anzahl von Datenvergleichen und -austausch aus und ist die effizienteste Methode zum Sortieren gängiger nicht zusammenhängender Daten (zufällig verstreute Daten).
Quick Sort ist ein Sortieralgorithmus, der in der Praxis als der schnellste gilt und in vielen Programmen verwendet wird. http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/quick-sort.html
Ich habe den Java-Code auf der obigen Site durch Python ersetzt (wahrscheinlich fast so wie er ist).
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)
Es gibt zu viele Orte, um das Größenverhältnis zu beurteilen. Was soll ich machen?