Hi all,
I just wanted to introduce my little sorting algo that seems pretty fast. (ok ...thats to verify ;))
The algo does the following:
1- determine "a" the smallest value of Tab A.
2- Clear "a" from tab A by moving "-1" to that location (sentinel value)
3- Copy "a" on tab B
4- repeat steps 1, 2, 3 untill tab2 is full.
Hope you'll enjoy.
I just wanted to introduce my little sorting algo that seems pretty fast. (ok ...thats to verify ;))
The algo does the following:
1- determine "a" the smallest value of Tab A.
2- Clear "a" from tab A by moving "-1" to that location (sentinel value)
3- Copy "a" on tab B
4- repeat steps 1, 2, 3 untill tab2 is full.
Hope you'll enjoy.
And that's the proc ;)
.686
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
Sort PROTO :DWORD, :DWORD, :DWORD
.data
Tab db "This is a test-string.",0
TabLen equ $ - OFFSET Tab
Tab2 db TabLen dup (0)
.code
start:
invoke Sort, addr Tab, addr Tab2, TabLen
ret
Sort proc uses edi esi edx ecx src:DWORD, dest:DWORD, len:DWORD
mov edi, dest
mov esi, src
mov edx, edi
mov ecx, esi
add edx, len
add ecx, len
Reinit:
mov ah, byte ptr [esi]
cont:
mov al, byte ptr [esi]
cmp al, ah
ja @F
mov ebx, esi
mov ah, al
@@:
inc esi
cmp esi, ecx
jnz cont
mov byte ptr [edi], ah
mov byte ptr [ebx], -1 ; sentinel value
mov esi, src
inc edi
cmp edi, edx
jnz Reinit
ret
Sort endp
end start
Hi Axial.
Nice job. For very small buffers this is okay. But think for each element in B you are scanning all elements in A, so you are doing length(A)^2 scans. You will find this to be very slow on large buffers.
Take some time and think about how you can optimize. There are many sorting algorithms out there for you to look at. QuickSort, BubbleSort, etc. Compare them to your method.
Nice job. For very small buffers this is okay. But think for each element in B you are scanning all elements in A, so you are doing length(A)^2 scans. You will find this to be very slow on large buffers.
Take some time and think about how you can optimize. There are many sorting algorithms out there for you to look at. QuickSort, BubbleSort, etc. Compare them to your method.
Axial's algorithm actually has a name - Selection Sort.
Check out http://cs.smith.edu/~thiebaut/java/sort/demo.html for a visual display and description of the common sorting algorithms. I am actualy party through writing a heap sort algorithm and hope to have it finished withen the next couple of days, and once I have Ill post it here.
Another site with some algo demostrations here :alright: