1 REM Ins{nd av Leopold Lundstr|m <2694> 1986-10-23 12.34.54 (DUMP) 10 REM ++++++++++++++++++++++++ 11 REM Subrutiner SORTERING 12 REM Av Anders Sandberg <4104> 13 REM 14 REM Program SORT4104.BAS 15 REM Inmatade efter artikel i 16 REM ABC-bladet 3.86 s 39 ff 17 REM av L Lundstr|m <2694> 18 REM 19 REM Prog stl ... 5.8 Kbyte 20 REM Variabler .. 0.4 Kbyte 21 REM 22 REM Testad p} f|ljande maskiner 23 REM ABC80 11273 av <2694> 86-10-21 24 REM Speciella tillbeh|r 25 REM Utbyggt minne ..(Nej) 26 REM 27 REM Anv{nder : 28 REM 29 REM ------------------------------ 30 REM Beskrivning : 31 REM Se ABC-bladet 32 REM 1000 REM 1010 REM Falsk bubblesort 1020 REM 1030 FOR I%=1% TO N%-1% : T$=B$(I%) : FOR J%=I%+1% TO N% 1040 IF T$>B$(J%) B$(I%)=B$(J%) : B$(J%)=T$ : T$=B$(I%) 1050 NEXT J% : NEXT I% 1060 RETURN 1100 REM 1110 REM Bubblesort KNUTH 5.2.2 B 1120 REM 1130 J%=N% 1140 R%=J% : J%=0 : FOR I%=1% TO R%-1% 1150 IF B$(I%)>B$(I%+1%) T$=B$(I%) : B$(I%)=B$(I%+1%) : B$(I%+1%)=T$ : J%=I% 1160 NEXT I% : IF J% THEN 1140 ELSE RETURN 1200 REM 1210 REM Bubblesort KNUTH 5.2.2 B 1220 REM 1230 R%=N% : J%=1% 1240 L%=J% : J%=0% : FOR I%=L% TO R%-1% 1250 IF B$(I%)>B$(I%+1) T$=B$(I%) : B$(I%)=B$(I%+1%) : B$(I%+1%)=T$ : J%=I% 1260 NEXT I% : R%=J% : J%=0% : FOR I%=R% TO L%+1% STEP -1% 1270 IF B$(I%)B$(J%) T$=B$(J%) : K%=J% 1350 NEXT J% : B$(K%)=B$(I%) : B$(I%)=T$ : NEXT I% 1360 RETURN 1400 REM 1410 REM Selection sort - delayed. 1420 REM 1430 FOR I%=1% TO N%-1% : K%=I% 1440 FOR J%=I%+1% TO N% : IF B$(K%)>B$(J%) K%=J% 1450 NEXT J% : IF K%<>I% T$=B$(K%) : B$(K%)=B$(I%) : B$(I%)=T$ 1460 NEXT I% : RETURN 1500 REM 1510 REM Insertion sort KNUTH 5.2.1 S 1520 REM 1530 FOR I%=2% TO N% : T$=B$(I%) 1540 FOR J%=I%-1% TO 1% STEP -1% : IF T$N%-D% K%=N%-D% 1660 FOR I%=J%+1% TO K% : IF B$(I%)>B$(I%+D%) T$=B$(I%) : B$(I%)=B$(I%+D%) : B$(I%+D%)=T$ 1670 NEXT I% : NEXT J% : IF Q%>P% D%=Q%-P% : Q%=Q%/2% : R%=P% : GOTO 1650 1680 NEXT T% : RETURN 1700 REM 1710 REM Shell's sort KNUTH 5.2.1 D (variant) 1720 REM 1730 H%=N% 1740 H%=H%/2% : IF H%=0% RETURN 1750 FOR J%=H%+1% TO N% : T$=B$(J%) 1760 FOR I%=J%-H% TO 1% STEP -H% : IF T$M% K%=0% ELSE 1988 1936 I%=L%+1% : J%=(L%+R%)/2% : T$=B$(J%) : B$(J%)=B$(I%) : B$(I%)=T$ : J%=R% 1940 IF B$(L%)>B$(I%) T$=B$(L%) : B$(L%)=B$(I%) : B$(I%)=T$ 1944 IF B$(I%)>B$(R%) T$=B$(R%) : B$(R%)=B$(I%) : B$(I%)=T$ 1948 IF B$(L%)>B$(I%) T$=B$(L%) : B$(L%)=B$(I%) : B$(I%)=T$ 1952 I%=I%+1% : IF T$>B$(I%) GOTO 1952 1956 J%=J%-1% : IF T$I% A$=B$(I%) : B$(I%)=B$(J%) : B$(J%)=A$ : GOTO 1952 1964 B$(L%+1%)=B$(J%) : B$(J%)=T$ : H%=R%-J% : I%=J%-L% 1968 IF H%>=I% AND I%>M% K%=K%+1% : L%(K%)=J%+1% : R%(K%)=R% : R%=J%-1% : GOTO 1936 1972 IF I%>H% AND H%>M% K%=K%+1% : L%(K%)=L% : R%(K%)=J%-1% : L%=J%+1% : GOTO 1936 1976 IF I%>M% AND H%<=M% R%=J%-1% : GOTO 1936 1980 IF H%>M% AND I%<=M% L%=J%+1% : GOTO 1936 1984 IF K% L%=L%(K%) : R%=R%(K%) : K%=K%-1% : GOTO 1936 1988 GOTO 1530 2000 REM 2005 REM Heap sort KNUTH 5.2.3 H 2010 REM 2015 R%=N% : L%=R%/2%+1% 2020 IF L%>1% L%=L%-1% : T$=B$(L%) : GOTO 2030 2025 T$=B$(R%) : B$(R%)=B$(1%) : R%=R%-1% : IF R%=1% B$(1%)=T$ : RETURN 2030 J%=L% 2035 I%=J% : J%=J%+J% : IF J%>R% GOTO 2050 2040 IF J%L% IF T$>B$(I%) B$(J%)=B$(I%) : GOTO 2050 2055 B$(J%)=T$ : GOTO 2020