PRO sinksort, top swap = 1 pass = 0 last = 0 WHILE swap NE 0 DO BEGIN handle = HANDLE_INFO(top, /FIRST_CHILD) handle2 = HANDLE_INFO(handle, /SIBLING) swap = 0 ;Do the compares: WHILE handle2 NE last DO BEGIN HANDLE_VALUE, handle, current HANDLE_VALUE, handle2, next IF current GT next THEN BEGIN HANDLE_MOVE, handle2, handle, /SIBLING swap = swap + 1 ENDIF ELSE handle=handle2 handle2 = HANDLE_INFO(handle, /SIBLING) ENDWHILE last = handle pass = pass+1 ENDWHILE END