Sortier-Algorithmen

Previous topic - Next topic

Quentin

Nachtrag nach Forum-Umzug

Anm.: Seit SORTARRAY eigentlich überflüssig

Code (glbasic) Select

DIM a[1000]

FOR i = 0 TO 999
  a[i] = RND(1000)
NEXT

t1 = GETTIMERALL()
bubblesort(a[])
t2 = GETTIMERALL()

t3 = t2 - t1
PRINT "Zeit für Bubble Sort: " + FORMAT$(10, 2, t3) + " Millisekunden", 0 ,0
SHOWSCREEN
KEYWAIT

WHILE TRUE
  x = 0
  y = 0
  FOR i = 0 TO 999
    PRINT a[i], x, y
    INC y, 10
    IF y > 470
      y = 0
      INC x, 30
    ENDIF
  NEXT
  SHOWSCREEN
WEND


// ------------------------------------------------------------- //
// -=#  BUBBLESORT  #=-
// ------------------------------------------------------------- //
FUNCTION bubblesort: array[]

  LOCAL count = BOUNDS(array[], 0) - 1
  LOCAL notsorted = TRUE
  LOCAL i, t
 
  WHILE notsorted
    notsorted = FALSE
    FOR i = 0 TO count - 1
      IF array[i] > array[i+1]
        t = array[i]
        array[i] = array[i+1]
        array[i+1] = t
        notsorted = TRUE
      ENDIF
    NEXT
  WEND

ENDFUNCTION // BUBBLESORT

Quentin

#1
Die schnelle Sortiervariante: (abgekupfert bei einem Delphi-Listing)

Code (glbasic) Select

// --------------------------------- //
// Project: sort
// Start: Monday, August 20, 2007
// IDE Version: 4.192



DIM a[1000]

FOR i = 0 TO 999
  a[i] = RND(1000)
NEXT

t1 = GETTIMERALL()
quicksort(a[], 0, BOUNDS(a[], 0) - 1)
//bubblesort(a[])
t2 = GETTIMERALL()

t3 = t2 - t1
PRINT "Zeit für Quicksort: " + FORMAT$(10, 2, t3) + " Millisekunden", 0 ,0
SHOWSCREEN
KEYWAIT

WHILE TRUE
  x = 0
  y = 0
  FOR i = 0 TO 999
    PRINT a[i], x, y
    INC y, 10
    IF y > 470
      y = 0
      INC x, 30
    ENDIF
  NEXT
  SHOWSCREEN
WEND


// ------------------------------------------------------------- //
// -=#  QUICKSORT  #=-
// ------------------------------------------------------------- //
FUNCTION quicksort: array[], low, high

  LOCAL lo, hi, piv, t
 
  lo = low
  hi = high
  piv = array[high]
  WHILE TRUE
    WHILE array[lo] < piv
      INC lo, 1
    WEND
    WHILE array[hi] > piv
      DEC hi, 1
    WEND
    IF lo <= hi
      t = array[lo]
      array[lo] = array[hi]
      array[hi] = t
      INC lo, 1
      DEC hi, 1
    ENDIF
    IF lo > hi THEN BREAK 
  WEND
  IF hi > low THEN quicksort(array[], low, hi)
  IF lo < high THEN quicksort(array[], lo, high)

ENDFUNCTION // QUICKSORT

Schranz0r

Irgendwie cool, auch wenn ich es atm nicht brauche!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Die Codes finde ich spitze! Darf ich sie (nur wenn du erlaubst) benutzen und mit meiner DB verbinden?
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

#4
dürfen latürnich frei verwendet werden, sonst ständen sie nicht hier. Aber wie gesagt, sei SORTARRAY überflüssig