[PYTHON] Lernen Sie das schnelle Sortieren, um zufällige FizzBuzz-Spalten zu sortieren

Einführung

Ich beschloss, eine schnelle Sortierung zu lernen, um eine zufällige FizzBuzz-Spalte zu sortieren.

Was ist schnelle Sortierung (zitiert von anderen Websites)

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

Code

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)

Bedenken hinsichtlich des Sortierens von FizzBuzz-Spalten

Es gibt zu viele Orte, um das Größenverhältnis zu beurteilen. Was soll ich machen?

Recommended Posts

Lernen Sie das schnelle Sortieren, um zufällige FizzBuzz-Spalten zu sortieren
Sortieren Sie zufällige FizzBuzz-Spalten mit schneller Sortierung
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Schnelle Sortierung ohne Sortierung