Sorting algorithms/Cocktail sort: Difference between revisions
Content added Content deleted
Puppydrum64 (talk | contribs) No edit summary |
|||
Line 134: | Line 134: | ||
-31 0 1 2 2 4 45 58 65 69 74 82 82 83 88 89 99 104 112 782 |
-31 0 1 2 2 4 45 58 65 69 74 82 82 83 88 89 99 104 112 782 |
||
</pre> |
</pre> |
||
=={{header|6502 Assembly}}== |
|||
Implemented in Easy6502. Output is provided below but it's best to watch this in action. Just copy and paste the code in, hit Assemble then Run. Make sure you check the Monitor box and set the address to 1200 and the length to 100. This takes about half as long as the bubble sort. |
|||
<lang 6502asm>define z_HL $00 |
|||
define z_L $00 |
|||
define z_H $01 |
|||
define temp $02 |
|||
define temp2 $03 |
|||
define yINC $04 |
|||
define yDEC $05 |
|||
set_table: |
|||
dex |
|||
txa |
|||
sta $1200,y |
|||
iny |
|||
bne set_table ;stores $ff at $1200, $fe at $1201, etc. |
|||
lda #$12 |
|||
sta z_H |
|||
lda #$00 |
|||
sta z_L ;get the base address of the data table |
|||
lda #0 |
|||
tax |
|||
tay ;clear regs |
|||
sty yINC ;yINC = 0 |
|||
dey ;LDY #255 |
|||
sty yDEC ;yDEC = 255 |
|||
iny ;LDY #0 |
|||
JSR COCKTAILSORT |
|||
BRK |
|||
COCKTAILSORT: |
|||
;yINC starts at the beginning and goes forward, yDEC starts at the end and goes back. |
|||
LDY yINC |
|||
LDA (z_HL),y ;get item Y |
|||
STA temp |
|||
INY |
|||
LDA (z_HL),y ;get item Y+1 |
|||
DEY |
|||
STA temp2 |
|||
CMP temp |
|||
bcs doNothing_Up ;if Y<=Y+1, do nothing. Otherwise swap them. |
|||
;we had to re-arrange an item. |
|||
lda temp |
|||
iny |
|||
sta (z_HL),y ;store the higher value at base+y+1 |
|||
inx ;sort count. If zero at the end, we're done. |
|||
dey |
|||
lda temp2 |
|||
sta (z_HL),y ;store the lower value at base+y |
|||
doNothing_Up: |
|||
LDY yDEC |
|||
LDA (z_HL),y |
|||
STA temp |
|||
DEY |
|||
LDA (z_HL),y |
|||
INY |
|||
STA temp2 |
|||
CMP temp |
|||
bcc doNothing_Down ;if Y<=Y+1, do nothing. Otherwise swap them. |
|||
;we had to re-arrange an item. |
|||
lda temp |
|||
dey |
|||
sta (z_HL),y ;store the higher value at base+y+1 |
|||
inx ;sort count. If zero at the end, we're done. |
|||
iny |
|||
lda temp2 |
|||
sta (z_HL),y ;store the lower value at base+y |
|||
doNothing_Down: |
|||
INC yINC |
|||
DEC yDEC |
|||
LDA yINC |
|||
BPL COCKTAILSORT |
|||
CPX #0 |
|||
BEQ doneSorting |
|||
LDX #0 ;reset the counter |
|||
LDY #0 |
|||
STY yINC |
|||
DEY ;LDY #$FF |
|||
STY yDEC |
|||
INY ;LDY #0 |
|||
JMP COCKTAILSORT |
|||
doneSorting: |
|||
RTS</lang> |
|||
{{out}} |
|||
<pre> |
|||
1200: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |
|||
1210: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |
|||
1220: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f |
|||
1230: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |
|||
1240: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |
|||
1250: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |
|||
1260: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |
|||
1270: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |
|||
1280: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f |
|||
1290: 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f |
|||
12a0: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af |
|||
12b0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf |
|||
12c0: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf |
|||
12d0: d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df |
|||
12e0: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef |
|||
12f0: f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff |
|||
</pre> |
|||
=={{header|AArch64 Assembly}}== |
=={{header|AArch64 Assembly}}== |
||
{{works with|as|Raspberry Pi 3B version Buster 64 bits}} |
{{works with|as|Raspberry Pi 3B version Buster 64 bits}} |