PRINT PRINT "クイックソートします。" INPUT PROMPT "全部で何個の自然数ですか? ":a PRINT DIM a(n) MAT INPUT PROMPT "データーをカンマで区切って入力してください。 ":n PRINT FOR i=1 TO n PRINT a(i); NEXT i PRINT PRINT CALL sort(a,1,n) PRINT "並び替えた後 :" PRINT FOR i=1 TO n PRINT a(i); NEXT i PRINT END EXTERNAL SUB sort(a(),sml,big) LET sm=sml LET bg=big LET x=ROUND((sm+bg)/2,0) !小数点以下四捨五入 LET kjn=a(x) !まず基準になる値を決める DO DO WHILE a(sm) < kjn !左から大きいものを検索 LET sm=sm+1 LOOP DO WHILE kjn < a(bg) !右から小さいものを検索 LET bg=bg-1 LOOP IF sm =< bg THEN !交換して先に進む LET t=a(sm) LET a(sm)=a(bg) LET a(bg)=t LET sm=sm+1 LET bg=bg-1 END IF LOOP WHILE sm =< bg IF sml < bg THEN CALL sort(a,sml,bg) !前半を指定して再帰呼び出し IF sm < big THEN CALL sort(a,sm,big) !後半を指定して再帰呼び出し END SUB