[#1] FileRequester'y czyli kłopot z bąbelkami....
FileRequester z biblioteki 'arp.library' nigdy mi się nie podobał.
Dopiero ten z 'req.library' uznałem za wzorowy przykład programowania.
Oba jednak mają pewne wady,więc dla moich zastosowań najlepiej napisać włase okno
wyboru pliku.

Przydziliłem w RAM listę jednokierunkową dla nazw pobieranych z funkcji
Examine() i ExNext() ale otrzymane nazwy nie są w kolejności alfabetycznej....?

Napisałem sortowanie bąbelkowe na blokach listy jednokierunkowej
podmieniając same tylko wskaźniki w blokach pamięci przydzielonych na nazwy.

Metoda ta dla posortowania np.400 nazw działa zbyt wono....

Najwięcej czasu marnuje procedura porównująca nazwy.



Jak mam ją przyspieszyć???




Oto kod:


;-----------------------------------------------------
;CPU MC68000 (68k)
;System: Amiga 500 (OS v1.3/Kickstart v34)
;Assembler: DevPac (v3.02b/HiSoft)

;Procedura sortowania tekstu. (Algorytm-Bąbelkowy)
;Działanie:
;Porównywane są dwa ciągi tekstowe pierwszy wskazywany
;rejestrem A0 i drugi wskazywany przez A1 wynikiem
;działania procedury jest zwracany stan rejestru D0
;jeśli D0 = 0 to rej.A0 zawiera tekst nadrzędny do
;tekstu wskazywanego rej. A1


;Testy: OK! Działa...


Start_Test: lea TXT_01,a0
lea TXT_02,a1
bsr BubleSort
beq.s BezPodmiany
nop
nop ;reszta kodu....
nop
BezPodmiany: rts



;WEJSCIE: A0 = Adres początku pierwszego tekstu zakończonego na 0.
;
; A1 = Adres początku kolejnego tekstu zakończonego na 0.
;
;WYJSCIE: D0 = 0 jeśli teksty nie wymagają podmiany.
; (wystarczy testowanie znacznika Z )


BubleSort: movem.l d1-d2/a0-a1,-(sp)
BS_PP2: move.b (a0)+,d0
beq.s BS_PP1
bsr.s LowCase
move.b d0,d1
move.b (a1)+,d0
beq.s BS_PP0
bsr.s LowCase
move.b d0,d2
cmp.b d1,d2
beq.s BS_PP2
bpl.s BS_PP1
BS_PP0: moveq #-1,d0 ;ciągi tekstowe wymagają podmiany
bra.s BS_PP3
BS_PP1: moveq #0,d0 ;ciągi tekstowe nie wymagają podmiany
BS_PP3: movem.l (sp)+,d1-d2/a0-a1
rts


;Zamienia na małe litery rej. D0.B

LowCase: cmp.b #'A',d0
blt.s NoLowCase
cmp.b #'Z',d0
bgt.s NoLowCase
add.b #32,d0
NoLowCase: rts




TXT_01: dc.b 'zzz',0
TXT_02: dc.b 'aaa',0
;---------------------------------------------------
[#2] Re: FileRequester'y czyli kłopot z bąbelkami....

@68k_tester, post #1

Dla 400 elementów użyj np. qsort.

[#3] Re: FileRequester'y czyli kłopot z bąbelkami....

@Minniat, post #2

Słyszałem ,że qsort jest szybki. Znalazłem w "Wikipedi" przykłady w C niestety
nie dam rady zamienić ich na assembler (68k) bo zamieszczone tam opisy działania tego
algorytmu nie są dla mnie zrozumiałe. Nawet brak tam przykładu z sortowaniem tekstu są tylko
tablice liczbowe. Ponadto jest "rekurencja" a na Amidze stos to domyślnie 4 kb. więc
jak to ma działać????
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem