; ; This program originally available on the Motorola DSP bulletin board. ; It is provided under a DISCLAIMER OF WARRANTY available from ; Motorola DSP Operation, 6501 Wm. Cannon Drive W., Austin, Tx., 78735. ; ; Last Update 24 Sep 87 Version 1.1 ; ; Sorting by Heapsort method ; sort2 macro ARRAY,N_ITEMS sort2 ident 1,1 ; ; reference: Niklaus Writh, "Algorithms + Data Structures = Programs", ; Prentice-Hall, 1976, Program 2.8, page 75 ; ; ARRAY = location of an array of numbers in X memory space, ; first item is located at ARRAY. ; N_ITEMS = number of items in the array ; ; registers used: r0..r4 ; a,b,y1,x0,x1 ; assumes m0..m4 = $ffff ; uses 3 words of stack ; ; move #ARRAY-1,b ; constant move #>(N_ITEMS/2)+ARRAY,r0 ;r0=l move #>ARRAY+N_ITEMS-1,r1 ;r1=r move r1,y1 do #N_ITEMS/2,_wend1 move (r0)- jsr _sift _wend1 do #N_ITEMS-1,_wend2 move x:ARRAY,x1 ;x1=x move x:(r1),x0 move x0,x:ARRAY move x1,x:(r1)- move r1,y1 jsr _sift _wend2 jmp _end ; ; sift ; _sift move r0,r3 ;"i"=l move x:(r0),x1 ;x=a("i") _loop3 move r3,a ;a="i" subl b,a r3,r2 ;a = 2*i-array, i="i"=j move a,r3 cmp y1,a r3,r4 ;j-r jgt _wend3 ;if j