hi i´m in a trouble with a homework about the quicksort function in masm32 if you have a some example i will thank you a lot. i saw a threads with examples here but i can't see that.
There is a "no homework" requests rule in those forums...
Show us what you did and we might help you do your own work.
Please do not ask us to do the homework for you :icon_mrgreen:
Sorry i'm new in the forums my program is this:
.386
.model flat, stdcall
.STACK 64;16
option casemap :none ; case sensitive
.nolist
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
.list
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\oleaut32.lib
.data
arreglob db 1,4,2
.code
start:
mov esi,OFFSET arreglob
mov al,[esi]
inc esi
inc ecx
mov al,[esi]
;mov arreg[esi]
invoke ClearScreen
INVOKE nrQsortA,offset arreglob,3
invoke locate,10,10
invoke StdOut,ADDR arreglob
invoke ExitProcess,0
end start
i dont now what is the problem because the program dont print
P.D sorry for my english i'm latinamerican and my english is poor
remove the .STACK directive for Flat models
if you are going to INCLUDELIB oleaut32.lib, you should also INCLUDE oleaut32.inc
i don't think either is needed, in this case
arreglob db 1,4,2
i am pretty sure the routine is designed to sort DWORD's - not BYTE's
arreglob dd 1,4,2
you have binary values in the array - not ASCII values
so - to diplay them you will want to convert them to ASCII decimal or ASCII hexidecimal (probably) strings
then display them
also - displayed strings should be zero-terminated
Many thanks for your help dedndave I will do what you tell me and hopefully make my program work fine
Thanks a lot :biggrin: :biggrin:
Just note that "nrQsortA" is designed to sort DWORD sized numbers where your example is trying to sort byte sized data. If you need to sort byte data you either need to do some conversions or write a different algorithm. If you are required just to sort numbers, use DWORD sized data and any of the numeric sorts will work fine for you.
myarray dd 10,9,8,7,6,5,4,3,2,1
When you call an array sort procedure you pass the address of the array, in this instance "OFFSET myarray" and you pass the count of array members, in this instance 10.
The advantage of using DWORD over BYTE is DWORD has a 4 billion number range where BYTE on has 256.
Hi jlopezs104,
Here is a quick example :
include \masm32\include\masm32rt.inc
NUMB_OF_MEMBERS equ 10
.data
array dd 80,95,100,70,60,72,30,10,20,5
msg db 'Member %d = %d',13,10,0
.code
start:
call main
invoke ExitProcess,0
main PROC uses esi ebx
mov esi,OFFSET array
invoke nrQsortA,esi,NUMB_OF_MEMBERS
mov ebx,1
@@:
invoke crt_printf,ADDR msg,ebx,DWORD PTR [esi]
add ebx,1
add esi,4
cmp ebx,NUMB_OF_MEMBERS+1
jnz @b
ret
main ENDP
END start
thanks for your help with your example finished understand how the arrangement and function quicksort and the other sorting functions :biggrin: :biggrin: :biggrin: you saved my life