Contributor: TEEMU.KIVINIEMI program sort_nodenumbers; (* This is an example which sorts Fidonet node numbers. *) (* The routine is very slow and basic, but it works. *) (* Made in January/1996 by Teemu Kiviniemi, 2:229/222@fidonet.org *) type node=record zone,net,node:word; end; const nodecount=1000; var c:word; ready:boolean; temp:node; nodes:array[0..nodecount] of node; procedure swap(var a,b:word); var temp:word; begin temp:=a; a:=b; b:=temp; end; procedure printnumbers; var b:word; begin for b:=0 to nodecount do writeln(nodes[b].zone,':',nodes[b].net,'/',nodes[b].node); end; begin randomize; for c:=0 to nodecount do begin nodes[c].zone:=random(6)+1; nodes[c].net:=random(998)+1; nodes[c].node:=random(998)+1; end; writeln('Before sorting:'); printnumbers; { Sort the zones } writeln('Zones...'); repeat ready:=true; for c:=0 to nodecount-1 do if nodes[c].zone> nodes[c+1].zone then begin swap(nodes[c].zone,nodes[c+1].zone); ready:=false; end; until ready; { Sort the nets } writeln('Nets...'); repeat ready:=true; for c:=0 to nodecount-1 do if (nodes[c].net> nodes[c+1].net) and (nodes[c].zone=nodes[c+1].zone) then begin swap(nodes[c].net,nodes[c+1].net); ready:=false; end; until ready; { Sort the nodes } writeln('Nodes...'); repeat ready:=true; for c:=0 to nodecount-1 do if (nodes[c].node> nodes[c+1].node) and (nodes[c].net=nodes[c+1].net) and (nodes[c].zone=nodes[c+1].zone) then begin swap(nodes[c].node,nodes[c+1].node); ready:=false; end; until ready; writeln(#13,#10,'After sorting:'); printnumbers; end. === End SORTNODE.PAS ===