a fast way to order a type ASC (number)

Blitz3D Forums/Blitz3D Programming/a fast way to order a type ASC (number)

GC-Martijn(Posted 2005) [#1]
H!

;i'm searching for a fast way to order a type
;order low ... high
;output: 4 5 7

Type monkey
	Field n%
End Type

bla.monkey 	= New Monkey
	bla\n%	= 5

bla.monkey 	= New Monkey
	bla\n%	= 7
	
bla.monkey 	= New Monkey
	bla\n%	= 4

For bla.monkey = Each Monkey
temp% = bla\n%


	For bla.monkey = Each Monkey
		If temp% ....?

		EndIf
	Next
Next
	
WaitKey



GfK(Posted 2005) [#2]
http://www.blitzbasic.com/codearcs/codearcs.php?code=220


BlackJumper(Posted 2005) [#3]
The king of Sorts is the QuickSort. There is an example in the CodeArcs, but it is working with an array rather than a Type.

http://www.blitzbasic.com/codearcs/codearcs.php?code=61

The principle on which it operates is a recursive binary chop {split the list into two halfs (see which is biggest), then split each half into two halfs.... keep going until you are comparing individual items} The code above has the 'difficult bit' coded (the recursive routine) so it should be easy to adapt to work with types.


GC-Martijn(Posted 2005) [#4]
A thanks GfK I forgot to search in the code archives with the keyword sort.

@BlackJumper
I will use the type script as an example but the array sort is nice too (maybe I can use that later)

See ya,
GC-Martijn


GC-Martijn(Posted 2005) [#5]
Now I'm testing and its working fast :)
My second [other question] is now:

Can I do this
Afunction(a type field)

for example the code to order a type dynamic by yust selecting a field.

I know that I can't do Afunction(obj\Index%) because i get the value then.
I tryed something with the undocumented Object. but that's wasn't working either.

Is this possible or must I make 2 function ?

Thanks
GC-Martijn

[code]
Type Item
Field Index%
Field otherField%
End Type

InsertionSort(Index%) ;Index%||otherField%
ShowData()

Function InsertionSort(what)
Local Item.Item, NextItem.Item
Local p.Item, q.Item
Local temp%

NextItem=After First Item
While NextItem<>Null
Item=NextItem
NextItem=After Item
p=Item : temp=Item\Index
Repeat ;--^------ dynamic (what)
q=Before p
If q=Null Then Exit
If temp >= q\Index Then Exit
p=q ;--^------ dynamic (what)
Forever
q=Item
Insert q Before p
Wend

End Function
[/cod]


big10p(Posted 2005) [#6]
Just pass the type handle and modify the specific field from within the function, like:

.
.
.

a.item = New item
Afunction(a)

Function Afunction(this.item)

  this\index = 1

End Function