L'algorythme de tri le plus simple

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

L'algorythme de tri le plus simple

Message par Guimauve »

Bonjour a tous

L'algorythme de tri le plus simple n'est pas le tri bulle. C'est celui-ci :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GnomeSort exemple
; File : GnomeSort Algorythm.pb
; File Version : 1.0.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 18-11-2006
; Last Update : 18-11-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; The most simple sorting algorythm is not the
; BubbleSort. The GnomeSort is the most simple
; routine possible. In big O notation :
;
; BubbleSort O(ln n²)
; GnomeSort O(ln n³)
;
; So the Gnome Sort is very efficient on array
; very small array n < 5. Otherwise you will 
; destroy your computer !!!
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< GnomeSort Ascendant <<<<<

Procedure GnomeSortAscendant(Array.l(1))
   
   Index = 0
   Size = PeekL(@Array() - 8)
   
   While Index < Size
      
      If Index = 0 Or Array(Index - 1) <= Array(Index)
         
         Index + 1   
         
      Else 
         
         Swap Array(Index - 1), Array(Index)
         Index - 1
         
      EndIf
      
   Wend
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< GnomeSort Descendant <<<<<

Procedure GnomeSortDescendant(Array.l(1))
   
   Index = 0
   Size = PeekL(@Array() - 8)
   
   While Index < Size
      
      If Index = 0 Or Array(Index - 1) >= Array(Index)
         
         Index + 1   
         
      Else 
         
         Swap Array(Index - 1), Array(Index)
         Index - 1
         
      EndIf
      
   Wend
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Dim Original.l(10)
Dim Alpha.l(10)
Dim Beta.l(10)

Macro DebugArray()
   
   Debug "Original() : Alpha() : Beta()"
   For Index = 0 To 10
      Debug RSet(Str(Original(Index)),2,"0") + " : " + RSet(Str(Alpha(Index)),2,"0") + " : " + RSet(Str(Beta(Index)),2,"0")
   Next
   
EndMacro

For Index = 0 To 10
   
   Original(Index) = Random(30)+5
   Alpha(Index) = Original(Index)
   Beta(Index) = Original(Index)
   
Next

Debug "----------------------------------------------------"
Debug "Before GnomeSort"
Debug "----------------------------------------------------"

DebugArray()

Debug "----------------------------------------------------"
Debug "After GnomeSort : "
Debug "Alpha Ascendent "
Debug "Beta Descendant"
Debug "----------------------------------------------------"

GnomeSortAscendant(Alpha())
GnomeSortDescendant(Beta())

DebugArray()

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Amusez-vous !

A+
Guimauve